我正在调整一个使用大量IO(LIO大约数百万)的查询。该查询在一个巨大的表上使用索引。因此,为了进行实验,我使用FULL提示强制对该表进行全面扫描,并使用PARALLEL提示并行化扫描。我的实验很成功,因为查询的速度提高了几个数量级(约3倍)。但我无法在tkprof报告和dbms_xplan.display_cursor中的巨大表上看到并行查询的缓冲区获取/物理读取。它们显示为0.
基于我从几个站点读取的内容,这可能是由于并行查询使用不同的IO(直接路径IO)绕过缓冲区缓存并直接从磁盘读取到PGA。但是这意味着直接路径IO等待事件应该出现在tkprof的报告中(10046跟踪事件,级别8),除了它没有!所以我的问题 - 我如何找到并测量并行查询引起的等待?
答案 0 :(得分:2)
执行并行查询时,每个并行从属是不同的会话。主会话是查询协调器,它协调工作,但不做任何工作。因此,您需要跟踪并行查询从属以查看这些等待。
如果你至少11克,你可以alter session set events 'sql_trace level 12';
您可能还想设置tracefile_identifier
,以帮助您查找相关的跟踪文件。
此处提供更多详细信息: https://blogs.oracle.com/db/entry/how_to_get_a_10046_trace_for_a_parallel_query
希望有所帮助。