tkprof报告中没有的Oracle并行查询等待统计信息



我正在调优一个使用大量IO的查询(IO的数量级为数百万)。查询在一个巨大的表上使用了一个索引。因此,为了进行实验,我使用full提示强制对该表进行完整扫描,并使用PARALLEL提示并行化扫描。我的实验是成功的,因为查询速度提高了几个数量级(大约3倍)。但是我无法在tkprof的报告和dbms_xplan.display_cursor中看到并行查询的缓冲区读取/物理读取。结果是0。

根据我从几个网站上读到的,这可能是由于使用不同的IO(直接路径IO)并行查询,它绕过缓冲区缓存并直接从磁盘读取到PGA。然而,这意味着直接路径IO等待事件应该显示在tkprof的报告中(10046跟踪事件,级别8),除了它没有!那么我的问题是——如何发现和测量由并行查询引起的等待?

在执行并行查询时,每个并行slave都是一个不同的会话。主会话是查询协调器,它协调工作,但不做任何工作。因此,您需要跟踪并行从查询以查看这些等待。

如果你至少吃11g,你可以吃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

希望对你有帮助。

最新更新