Oracle 直接路径读

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

direct path read较高的可能缘由有:缓存

1. 大量的磁盘排序操做,order by, group by, union, distinct, rollup, 没法在PGA中完成排序,须要利用temp表空间进行排序。 当从临时表空间中读取排序结果时,会产生direct path read.oracle

2. 大量的Hash Join操做,利用temp表空间保存hash区。函数

3. SQL语句的并行处理性能

4. 大表的全表扫描,在中,全表扫描的算法有新的变化,根据表的大小、高速缓存的大小等信息,决定是否绕过SGA直接从磁盘读Oracle11g取数据。而10g则是所有经过高速缓存读取数据,称为table scan(large)。11g认为大表全表时使用直接路径读,可能比10g中的数据文件散列读(db file scattered reads)速度更快,使用的latch也更少。blog

大量的direct path read等待时间最多是一个应用程序问题。 direct path read事件由SQL语句驱动,这些SQL语句执行来自临时的或常规的表空间的直接读取操做。 当输入的内容大于PGA中的工做区域时,带有须要排序的函数的SQL语句将排序结果写入到临时表空间中,临时表空间中的排序顺序串随后被合并,用于提供最终的结果。读取排序结果时,Oracle会话在direct path read等待事件上等待。DB_FILE_DIRECT_IO_COUNT初始化参数可能影响direct path read的性能。
 排序

相关文章
相关标签/搜索