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
这类读取通常在以下情况被使用:
·磁盘排序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/
本文探讨了Oracle数据库中DirectPathRead的应用场景及潜在问题,包括其在磁盘排序、并行查询和全表扫描中的作用,并提供了调整建议。
852

被折叠的 条评论
为什么被折叠?



