我正在调整一个使用大量 IO 的查询(LIO 约为数百万)。该查询使用了一个巨大表上的索引。因此,为了进行实验,我使用 FULL 提示强制对该表进行完整扫描,并使用 PARALLEL 提示并行扫描。我的实验很成功,查询速度提高了几个数量级(大约 3 倍)。但我无法在 tkprof 的报告和 dbms_xplan.display_cursor 中看到巨大表上的并行查询的缓冲区获取/物理读取。它们显示为 0。
根据我从多个站点读取的内容,这可能是由于使用不同的 IO(直接路径 IO)的并行查询绕过缓冲区缓存并直接从磁盘读取到 PGA。然而,这意味着直接路径 IO 等待事件应该显示在 tkprof 的报告中(10046 跟踪事件,级别 8),但事实并非如此!所以我的问题 - 如何查找和测量并行查询引起的等待?
当您执行并行查询时,每个并行从站都是一个不同的会话。 主会话是查询协调器,它协调工作,但不执行任何操作。 因此,您需要跟踪并行查询从属设备以查看这些等待。
如果您的电量至少为 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