暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日一练 091】性能优化-SQL tuning(四)

原创 李美静 恩墨学院 2020-12-15
1016

1 SQL Plan Directives

在Oracle数据库12c中,数据库服务器可以使用SQL计划指令,这是额外的信息和指令,优化器可以使用它们来生成更优的计划。例如,SQL plan指令可能指示优化器收集丢失的统计信息、创建列组统计信息或执行动态抽样。在SQL编译或执行期间,数据库将分析缺少统计信息或错误估计优化器基数的查询表达式,以创建SQL计划指令。当优化器生成执行计划时,指令将向优化器提供关于计划中引用的对象的附加信息。
SQL计划指令不绑定到特定的SQL语句或SQL ID。优化器可以为几乎相同的SQL语句使用SQL计划指令,因为SQL计划指令是在查询表达式上定义的。例如,指令可以帮助优化器处理使用类似模式的查询,比如基于web的查询,这些查询除了选择列表项之外都是相同的。数据库在SYSAUX表空间中持久地存储SQL计划指令。在生成执行计划时,优化器可以使用SQL计划指令来获取计划中访问的对象的更多信息。
指令会自动维护、根据需要创建,如果一年后不使用,则会被清除。
可以在DBA_SQL_PLAN_DIR_OBJECTS中监视指令。SQL计划指令通过在SYSAUX表空间中持久化编译和执行统计信息来提高计划的准确性,从而允许多个SQL语句使用它们。

2 Adaptive Execution Plans

Adaptive Execution Plans特性使优化器能够在运行时自动调整性能较差的执行计划,并防止在后续执行时选择性能较差的计划。优化器检测它所选择的计划,这样在运行时,如果优化器的估计不是最优的,就可以检测到它。然后计划可以自动适应实际情况。自适应计划是在优化器估计不准确时更改计划。
优化器可以根据语句执行期间收集的统计信息调整计划。所有的自适应机制都可以执行与最初在硬解析期间确定的计划不同的计划。这提高了查询处理引擎(编译和执行)生成更好的执行计划的能力。
这两种自适应计划技术是:
动态计划:在语句执行期间在子计划之间选择的动态计划。对于动态计划,优化器必须决定在动态计划中包含哪些子计划,收集哪些统计信息来选择子计划,以及此选择的阈值。
重新优化:相反,重新优化更改了当前执行之后的执行计划。对于重新优化,优化器必须决定在计划的哪个点上收集哪些统计信息,以及何时重新优化是可行的。
注意:OPTIMIZER_ADAPTIVE_REPORTING_ONLY控制了自适应优化的仅报告模式。当设置为TRUE时,自适应优化将以仅报告模式运行,其中收集自适应优化所需的信息,但不采取任何行动来更改计划。
当OPTIMIZER_FEATURES_ENABLE设置为12.1.0.1或更高,而OPTIMIZER_ADAPTIVE_REPORTING_ONLY设置为默认值FALSE时,数据库将使用自适应执行计划。

最后修改时间:2020-12-15 09:06:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论