与直接读取相关联的等待事件。当ORACLE将数据块直接读入会话的PGA(进程全局区)中,同时绕过SGA(系统全局区)。PGA中的数据并不和其他的会话共享。即表明,读入的这部分数据该会话独自使用,不放于共享的SGA中。

在排序操作(order by/group by/union/distinct/rollup/合并连接)时,由于PGA中的SORT_AREA_SIZE空间不足,造成需要使用临时表空间来保存中间结果,当从临时表空间读入排序结果时,产生direct path read等待事件。

使用HASH连接的SQL语句,将不适合位于内存中的散列分区刷新到临时表空间中。为了查明匹配SQL谓词的行,临时表空间中的散列分区被读回到内存中(目的是为了查明匹配SQL谓词的行),ORALCE会话在direct path read等待事件上等待。

使用并行扫描的SQL语句也会影响系统范围的direct path read等待事件。在并行执行过程中,direct path read等待事件与从属查询有关,而与父查询无关,运行父查询的会话基本上会在PX Deq:Execute Reply上等待,从属查询会产生direct path read等待事件。

直接读取可能按照同步或异步的方式执行,取决于平台和初始化参数disk_asynch_io参数的值。使用异步I/O时,系统范围的等待的事件的统计可能不准确,会造成误导作用。

该事件一般不可能显示为主要的瓶颈,但它实际上也许是就是祸首。由于ORACLE统计等待时间的方式会造成统计的时间量不准确(如:从属查询产生的时间无法进行统计),所以对该事件不应该使用v$session_event视图中的total_wait或time_waited进行估计,应该使用v$sesstat视图中的直接读取操作次数(physical reads direct)进行判断:

selecta.NAME,b.SID,b.VALUE,round((sysdate- c.LOGON_TIME) *24) hours_connectedfromv$statname a, v$sesstat b, v$session cwhereb.SID = c.SIDanda.STATISTIC# = b.STATISTIC#andb.VALUE>0anda.NAME='physical reads direct'orderbyb.VALUE由direct path read事件产生的原因,我们需要判断该事件正在读取什么段(如:散列段、排序段、一般性的数据文件),由此可判断产生该事件的原因是什么,可使用以下语句进行查询:

SELECTa.event,a.sid,c.sql_hash_value hash_vale,decode(d.ktssosegt,1,'SORT',2,'HASH',3,'DATA',4,'INDEX',5,'LOB_DATA',6,'LOB_INDEX',NULL)ASsegment_type,b.tablespace_name,b.file_nameFROMv$session_wait a, dba_data_files b, v$session c, x$ktsso dWHEREc.saddr = d.ktssoses(+)ANDc.serial# = d.ktssosno(+)ANDd.inst_id(+) = userenv('instance')ANDa.sid = c.sidANDa.p1 = b.file_idANDa.event ='direct path read'UNIONALLSELECTa.event,a.sid,d.sql_hash_value hash_value,decode(e.ktssosegt,1,'SORT',2,'HASH',3,'DATA',4,'INDEX',5,'LOB_DATA',6,'LOB_INDEX',NULL)ASsegment_type,b.tablespace_name,b.file_nameFROMv$session_wait a,dba_temp_files b,v$parameter    c,v$session      d,x$ktsso        eWHEREd.saddr = e.ktssoses(+)ANDd.serial# = e.ktssosno(+)ANDe.inst_id(+) = userenv('instance')ANDa.sid = d.sidANDb.file_id = a.p1 - c.VALUEANDc.NAME='db_files'ANDa.event ='direct path read'

注:如果是从临时文件中读取排序段的会话,则表明SORT_AREA_SIZE或PGA_AGGREGATE_TARGET的设置是不是偏小。如果是从临时文件中读取HASH段的会话,则表明HASH_AREA_SIZE或PAG_AGGREGATE_TARGET的设置是不是偏小。当direct path read等待事件是由于并行查询造成的(读取的是一般的数据文件而非临时文件),父SQL语句的HASHVALUE与子SQL语句的HASHVALUE不同,可以通过以下SQL查询产生子SQL语句的父SQL语句:

SELECTdecode(a.qcserial#,NULL,'PARENT','CHILD') stmt_level,a.sid,a.serial#,b.username,b.osuser,b.sql_hash_value,b.sql_address,a.degree,a.req_degreeFROMv$px_session a, v$session bWHEREa.sid = b.sidORDERBYa.qcsid, stmt_levelDESC初始化参数db_file_direct_io_count用来设置直接读出和写入操作设置最大的IO缓冲区大小,因此能影响direct path read的性能,该参数在9i中被隐蔽,并改以字节数而不是块数为单位。

>> 使用10046第8层跟踪直接读取操作的ORACLE会话,其中P3参数表明块读取的数量。

>> 也可使用strace,truss追踪直接读取或直接写入操作的UNIX进程,从生成的TRACE文件可获得相应的直接IO大小。

>> 在第1层使用追踪事件10357,启动执行直接IO操作的会话的调试信息。大量的direct path read等待事件最可能是一个应用程序的问题。

参数说明:

事件号:212

事件名:direct path read

参数一:读取数据文件的绝对文件号码file number

参数二:起始块号first dba

参数三:要读取的块数block cnt

由参数P1与P2推得访问的数据对象:

selects.segment_name, s.partition_namefromdba_extents swherebetweens.block_idand(s.block_id + s.blocks -1)ands.file_id =

注:

>> 1. 如果是Temp文件,则表示该会话正在读取它先前用direct path write操作所创建的临时段,查明使用的是什么类型的临时段,有助于了解会话所做的事情。

SELECTDISTINCTdecode(t.ktssosegt,1,'SORT',2,'HASH',3,'DATA',4,'INDEX',5,'LOB_DATA',6,'LOB_INDEX','UNDEFINED')FROMsys.x$ktsso tWHEREt.inst_id = userenv('instance')ANDt.kssoses =ANDt.ktssosno =

>> 2. 如果是数据文件,则可能是并行查询从属操作在工作,通过P1值确定数据文件的名称:

selects.NAMEfromv$datafile swheres.FILE# =unionallselecta.namefromv$tempfile a, v$parameter bwhereb.NAME= 'db_files'anda.FILE# + b.VALUE=

等待时间:无超时

oracle中创建事件的作用,Oracle常见等待事件说明(二)-direct path read/write相关推荐

  1. oracle中创建触发器

    从csdn上面看到一个如何创建触发器的问题,感觉自己很有必要保存学习,特写下来: 条件: 现有A.B两张表 A: 工号 姓名 密码 性别 年龄 ... B: 工号 姓名 密码 当对A表中的" ...

  2. 浅析oracle常见等待事件之 db file scattered read

    浅析oracle常见等待事件之 db file scattered read(转) 原文地址: http://www.hellodml.com/2011/12/%E6%B5%85%E6%9E%90or ...

  3. oracle常见等待事件,必看干货 | Oracle 常见的等待事件说明(下)

    原标题:必看干货 | Oracle 常见的等待事件说明(下) [上期回顾]干货 | Oracle 常见等待事件说明(上)( 点击可查看) 16.Library cache pin 这个等待事件和 li ...

  4. 创建emp表 oracle,Oracle中创建和管理表详解

    Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16   作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...

  5. oracle杀死进程时权限不足_在oracle中创建函数时权限不足

    我对oracle有一点了解.我试图创建一个如下所示的函数.在oracle中创建函数时权限不足 CREATE OR REPLACE FUNCTION "BOOK"."CON ...

  6. Oracle命令--如何查看oracle中创建的所有目录

    如何查看oracle中创建的所有目录 SQL> conn / as sysdba 已连接. SQL> create directory sscFjSsc as 'D:\his\data\s ...

  7. oracle 手动添加分区,如何在oracle中创建子分区?

    现在我开始学习oracle.some中的分区概念了.我现在如何管理分区,我试图在Oracle中创建子分区.我得到这个错误如何在oracle中创建子分区? SQL Error: ORA-14160: t ...

  8. Oracle中创建同义词

    Oracle中创建同义词语句: 我们都知道,在oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库 ...

  9. oracle数据存入临时表,oracle中创建临时表步骤

    当前位置:我的异常网» 数据库 » oracle中创建临时表步骤 oracle中创建临时表步骤 www.myexceptions.net  网友分享于:2014-06-08  浏览:4次 oracle ...

  10. oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包

    Java开发过程中一般使用LOG4J来将程序的运行日志记录到文件中,在ORACLE存储过程中也需要记录日志,我将工作中自己整理的一个记录日志的包分享出来,其实很简单,希望大家多提意见. 一.表结构 为 ...

最新文章

  1. argis怎么关掉对象捕捉_你和你的网恋对象,都怎么样了?
  2. sun.jersey使用Jackson转换数据
  3. 燕大计算机专业档次,河北省高校排名:分为四个档次,燕大在第二档,第三档有八所高校...
  4. python mysql数据库长连接_python 长连接 mysql数据库
  5. AI也脸盲 |黑人遭人脸识别技术“误判”概率竟高出白人5至10倍!
  6. 天津市电子计算机职业中专 概况,天津市电子计算机职业中专 .pptx
  7. 如何在ASP.NET Core中使用JSON Patch
  8. Oracle出现ora-01045的解决方法-可用
  9. 西门子S7-1200的PID应用(恒温热水器)
  10. 链表分割——牛客剑指offer
  11. 笔记二:云上传与调用获取openid
  12. 从零开始的Origin新手入门教程(速成)
  13. 如何提高迅雷下载速度
  14. 同一台电脑安装两个版本的jdk和jre
  15. IAR for 430 如何建一个简易工程
  16. 360一键wifi共享 v5.3 绿色免费版​
  17. python 节假日_python判断工作日,节假日
  18. NeurIPS'22杰出论文奖:3项研究出自华人团队,AlexNet获时间检验奖
  19. 项目依赖包文件生成requirements.txt
  20. Win 10装机量占据全球台式机总量的5%

热门文章

  1. 我的token鉴权机制hanhan
  2. ICC图文流程——(二)布局规划Floorplan
  3. 编译原理学习笔记(十八)~LL(1)文法
  4. 如何用html布天猫页面,天猫前端系列教材 (四十七)- 其他页面 - 登录页面
  5. openlayers 3扩展,调用百度地图、高德地图、天地图服务
  6. 【双11背后的技术】AliCloudDB——双11商家后台数据库的基石
  7. 使用postman传list参数,使用@RequestBody接收list对象接收不到,对象的属性值都是null
  8. Django ORM查询之外键、关系的反向引用
  9. android 动态摄像头权限,Android判断用户是否允许了摄像头权限实例代码
  10. 第12章 多元线性回归-整理6