当一个session 是从磁盘直接读取buffer 到PGA(相对从buffer cache在SGA中),
它在这个事件上等待。如果 I/O 子系统不能支持异步I/O,
然后每个等待对应的物理读请求。
如果 I/O 子系统支持异步I/O,那么处理是可以重叠执行读请求和处理blocks 已经存在在PGA里。
当process 尝试访问一个block 在PGA中,没有从磁盘读取, 它然后执行一个等待请求和更新这个事件的统计信息。
因此,等待的数量是和读请求的数量不一样的。
Check the following V$SESSION_WAIT parameter columns:
P1 - File_id for the read call 读取的文件id
P2 - Start block_id for the read call 读取的启示块
P3 - Number of blocks in the read call 读取的块数
产生的原因:
direct path read较高的可能原因有:
1. 大量的磁盘排序操作,order by, group by, union, distinct, rollup, 无法在PGA中完成排序,需要利用temp表空间进行排序。 当从临时表空间中读取排序结果时,会产生direct path read.
2. 大量的Hash Join操作,利用temp表空间保存hash区。
3. SQL语句的并行处理
4. 大表的全表扫描,在中,全表扫描的算法有新的变化,根据表的大小、高速缓存的大小等信息,决定是否绕过SGA直接从磁盘读Oracle
direct path read
最新推荐文章于 2021-04-08 07:50:42 发布