等待事件 direct path read 与11g中的非并行直接读

本文探讨了Oracle数据库中DirectPathRead的应用场景及潜在问题,包括其在磁盘排序、并行查询和全表扫描中的作用,并提供了调整建议。
direct path read(User I/O 类)

这类读取通常在以下情况被使用:
·磁盘排序IO操作(从临时表空间中读出排序结果);
·并行查询从属进程;
·预读操作。

最为常见的是第一种情况。在DSS系统中,存在大量的direct path read是很正常的,但是在OLTP系统中,
通常显著的直接路径读(direct path read)都意味着系统应用存在问题,从而导致大量的磁盘排序读
取操作。


在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是
物理读了。 在10g中,都是通过buffer cache来读的,所以不存在direct path read的问题。

direct path read较高的可能原因有:
 
1. 大量的磁盘排序操作,order by, group by, union, distinct, rollup, 无法在PGA中
   完成排序,需要利用temp表空间进行排序。当从临时表空间中读取排序结果到PGA时,
   会产生direct path read.
 
2. 大量的Hash Join操作,利用temp表空间保存hash区。
 
3. SQL语句的并行处理 (常规表空间的直接读取,所谓直接读取即从磁盘直接读到PGA)
 
4. 大表的全表扫描,在11g中,全表扫描的算法有新的变化,根据表的大小、高速缓存的大小
   等信息,决定是否绕过SGA直接从磁盘读取数据。而10g则是全部通过高速缓存读取数据,称
   为table scan(large)。11g认为大表全表时使用直接路径读,可能比10g中的数据文件散列
   读(db file scattered reads)速度更快,使用的latch也更少。具体有隐含参数。
 
大量的direct path read等待时间最可能是一个应用程序问题。 direct path read事件由SQL
语句驱动,这些SQL语句执行来自临时的或常规的表空间的直接读取操作。 当输入的内容大于
PGA中的工作区域时,带有需要排序的函数的SQL语句将排序结果写入到临时表空间中,临时表
空间中的排序顺序串随后被合并,用于提供最终的结果。读取排序结果时,Oracle会话在direct
path read等待事件上等待。DB_FILE_DIRECT_IO_COUNT初始化参数可能影响direct path read
的性能。

一个隐含参数:
    _serial_direct_read = auto  默认值
  _serial_direct_read = false 禁用direct path read
  _serial_direct_read = true 启用direct path read
  alter sytem set "_serial_direct_read"=never scope=both sid='*'; 可以显着减少direct path read
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-759050/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-759050/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值