问题描述
我们有一个带有文字的查询,并通过在一个过程中立即执行。具有相同文字值的查询,具有相同的sql id将间歇性地用于两个执行计划,大多数情况下选择有效计划,但有时它会选择低效计划。计划之间的区别是为一张巨大的表选择不同的索引。
我只想知道为什么有时会选择低效的计划?
如果统计数据已经过时,那么它将始终选择低效的计划。
我们可以通过多种方式解决这个问题,但我想了解计划不稳定的原因是什么?
我只想知道为什么有时会选择低效的计划?
如果统计数据已经过时,那么它将始终选择低效的计划。
我们可以通过多种方式解决这个问题,但我想了解计划不稳定的原因是什么?
专家解答
这里有一篇关于12c中的自适应优化器的精彩论文。在11g中,我们有一个名为 “基数反馈” 的功能
https://www.doag.org/formes/pubfiles/9625966/2017-DB-Nigel_Bayliss-Optimizer_Adaption_from_Oracle_Database_11g_to_Today-Praesentation.pdf
它涵盖了所有细节,但简而言之,正在发生的事情是:
-我们运行一个SQL
-我们看到实际性能/资源/等与我们估计的计划不符
-我们将SQL标记为可能需要根据以前的执行对将来的执行进行一些调整
-然后选择不同的计划。
* 目标 * 是不同的计划比原来的计划 * 更好 *
解决方案通常是使用SQL计划管理将您想要的计划锁定到位。
https://www.doag.org/formes/pubfiles/9625966/2017-DB-Nigel_Bayliss-Optimizer_Adaption_from_Oracle_Database_11g_to_Today-Praesentation.pdf
它涵盖了所有细节,但简而言之,正在发生的事情是:
-我们运行一个SQL
-我们看到实际性能/资源/等与我们估计的计划不符
-我们将SQL标记为可能需要根据以前的执行对将来的执行进行一些调整
-然后选择不同的计划。
* 目标 * 是不同的计划比原来的计划 * 更好 *
解决方案通常是使用SQL计划管理将您想要的计划锁定到位。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




