签到成功

知道了

CNDBA社区CNDBA社区

Oracle 19c 自适应计划(adaptive plans) 特性说明(建议关闭)

2024-01-15 20:29 362 0 原创 Oracle 19c
作者: dave

1 Adaptive Query Plans 特性说明

adaptive plans 是 Oracle 12c 中引入的新特性,官网对该特性的说明如下:http://www.cndba.cn/dave/article/131499

https://docs.oracle.com/database/121/TGSQL/tgsql_optcncpt.htm#TGSQL94982
https://docs.oracle.com/database/121/TGSQL/tgsql_influence.htm#TGSQL257

http://www.cndba.cn/dave/article/131499

MOS 的文章:http://www.cndba.cn/dave/article/131499

Adaptive Execution Plans (Doc ID 1409636.1)
Adaptive Query Optimization (Doc ID 2031605.1)
Oracle Database 12c 版本1的自适应特性的建议 (Adaptive Features, Adaptive Statistics 以及 12c SQL 性能) (Doc ID 2297986.1)

http://www.cndba.cn/dave/article/131499
http://www.cndba.cn/dave/article/131499

The ability of the optimizer to adapt a plan, based on information learned during execution, can greatly improve query performance.

Adaptive plans are useful because the optimizer occasionally picks a suboptimal default plan because of a cardinality misestimate. The ability to adapt the plan at run time based on actual execution statistics results in a more optimal final plan. After choosing the final plan, the optimizer uses it for subsequent executions, thus ensuring that the suboptimal plan is not reused.

自适应特性,是指优化器基于之前执行结果的相关信息,在下次相关 SQL 的执行阶段调整执行计划和重新生成执行计划的一组功能。它能够使SQL在第一次运行时根据运行时统计信息动态改变最终的执行计划,用于避免SQL语句在第一次执行时由于差的执行计划引起灾难性的性能问题。

http://www.cndba.cn/dave/article/131499

执行计划自适应分为两个组件:

  1. 自适应执行计划 - 允许优化器在 SQL 执行阶段改变执行计划。
  2. 自适应统计信息 - 允许优化器基于之前执行结果的信息,重新生成执行计划。这些信息有些是固化到数据字典中的,例如:SQL Plan Directives 或者自动生成的扩展统计信息。

在 12.1 版本里,两个组件被同一个参数 optimizer_adaptive_features控制,默认值是 TRUE.
在 12.2 中参数 optimizer_adaptive_features 被废弃,自适应特性被两个参数控制, optimizer_adaptive_plans 和 optimizer_adaptive_statistics。http://www.cndba.cn/dave/article/131499

  1. 参数 optimizer_adaptive_plans 控制是否启用自适应执行计划特性,即允许优化器在 SQL 执行时动态调整执行计划,默认值是 TRUE。
  2. 参数optimizer_adaptive_statistics 控制是否启用自适应统计信息功能,该参数默认是FALSE。自动扩展统计信息是被表级的属性 AUTO_STAT_EXTENSIONS控制的,默认是 OFF. (AUTO_STAT_EXTENSIONS 可以使用 DBMS_STATS 的 SET_TABLE_PREFS 以及 SET_GLOBAL_PREFS来设置。)

2 关闭特性

自适应特性的出发点是好的,但同其他新特性一样,当前在 19c 版本中 Oracle 并没有完全调教好,开启自适应的执行计划可能会导致执行计划的不稳定。http://www.cndba.cn/dave/article/131499

所以在 19c 中建议关闭该特性,通过optimizer_adaptive_plans 参数控制,

http://www.cndba.cn/dave/article/131499

OPTIMIZER_ADAPTIVE_PLANS:
Control adaptive plans.
By default, this parameter is true, which means that adaptive plans are enabled.
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/OPTIMIZER_ADAPTIVE_PLANS.html

操作示例:http://www.cndba.cn/dave/article/131499

SQL> show parameter 'optimizer_adaptive_plans';

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
optimizer_adaptive_plans             boolean
TRUE

SQL> alter system set optimizer_adaptive_plans=false scope=both;

System altered.

SQL> show parameter 'optimizer_adaptive_plans';

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
optimizer_adaptive_plans             boolean
FALSE
SQL>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2237
    原创
  • 3
    翻译
  • 546
    转载
  • 186
    评论
  • 访问:6599148次
  • 积分:4242
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ