能否查看Oracle估算执行计划的备选方案及选择决策依据?
Oracle执行计划备选方案与决策依据查看方法
一、查看优化器考虑过的备选执行计划
- 使用
DBMS_XPLAN.DISPLAY_CURSOR并指定FORMAT => 'ADVANCED':执行目标查询后,通过该命令可获取包含备选计划的详细输出,结果中的Alternative Plans段会列出优化器评估过但未最终选定的执行路径,附带各路径的成本估算数据。 - 启用10053优化器跟踪:执行
ALTER SESSION SET EVENTS '10053 trace name context forever, level 1';后运行查询,生成的跟踪文件会完整记录优化器对所有备选计划的评估过程,包括每个路径的基数计算、成本拆解,以及放弃该计划的具体原因。 - 借助SQL Developer可视化工具:在SQL Developer中执行查询后,切换到执行计划的
Alternative Plans标签,可直观查看所有备选执行路径,对比各路径的成本、行数估算等关键指标。
二、分析未采用备选计划的原因
- 对比基数估算差异:优化器核心决策依据是行数估算(基数),若备选计划中某步骤的基数与实际偏差过大,会导致成本计算失真,优化器会判定该路径效率更低。
- 查看成本计算结果:优化器基于I/O、CPU资源消耗计算总执行成本,若备选计划的总成本高于选定计划,会被直接排除。
- 检查启发式规则限制:部分场景下优化器会遵循内置启发式规则(比如小表优先用嵌套循环、大表哈希连接的阈值),直接跳过某些备选路径,10053跟踪文件会明确记录这些规则的应用逻辑。
三、获取选定计划的决策依据
DBMS_XPLAN.DISPLAY_CURSOR的ADVANCED格式会在输出中添加优化器的决策说明,比如解释为什么选择哈希连接而非嵌套循环,包含成本、基数的对比数据。- 10053跟踪文件是最全面的来源,它记录了从查询解析、查询转换、访问路径评估到最终计划选择的完整流程,每一步的决策逻辑、参数计算都有详细记录,能完全还原优化器的选择过程。
内容的提问来源于stack exchange,提问作者ABu
相关产品推荐
相关产品推荐

