【问题标题】:All plan generator plans in OracleOracle 中的所有计划生成器计划
【发布时间】:2019-04-13 20:37:37
【问题描述】:

在阅读Oracle SQL tuning guide 时,我遇到了这样的一句话(你可以在这个chapter 中找到它):

计划生成器通过尝试不同的访问路径、连接方法和连接顺序来探索查询块的各种计划。

许多计划都是可能的,因为数据库可以使用各种组合来产生相同的结果。优化器选择成本最低的计划。

图 4-2 优化器组件

是否有可能以某种方式获得由计划生成器生成的所有这些计划?

也许有用于此视图或系统视图的标准 PL/SQL 包?

【问题讨论】:

  • 不,在 Oracle 中执行 SQL 时,不可能得到中间计划。
  • @XING 好的,谢谢。也许将其发布为答案?那我接受你的回答。
  • 如果您想了解有关查询优化的内部信息,请查看10053 跟踪。您可以在那里看到一些被丢弃的替代品
  • @MarmiteBomber 感谢链接!

标签: sql oracle optimization


【解决方案1】:

通常您不需要查看所有可能的计划,但在某些情况下有一个有趣的问题,为什么 Oracle 会放弃某些计划而使用替代计划。

要回答这个问题,理想的条目是 Oracle 生成的 10053 跟踪

Wolfgang Breitling 有一篇关于这个主题的经典论文,可以在 here 找到。

乔纳森·刘易斯也在他的Cost-Base Oracle Fundamentals 中专门为这个主题写了第 14 章10053 轨迹

Google 肯定会提供其他参考资料。

一句警告。 10053 不是 Oracle 上下文中最简单的东西。同样在每个版本中,您可能会期望输出发生变化。一个好的学习起点是调查在两个不同环境中产生不同执行计划的查询。简单地在两个数据库中获取 10053 跟踪并制作文件差异并观察差异。您将看到优化器参数、对象或系统统计数据是否存在差异,以及这些变化如何影响最终执行计划的选择。

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2021-12-28
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多