关于升级至12cR2版本的Optimizer 自适应特性的设置建议

优化器自适应特性的设置是需要考虑比较慎重的一个点,oracle的产品经理 Nigel Bayliss 也公布了几篇关于此方面的设置参考,具体如下(建议看下参考文档):

 

情景1

从Oracle Database 11g(或更早版本)升级

将数据库升级到Oracle Database 12c第2版后,建议使用默认的自适应功能设置。为此,只需在数据库的初始化参数文件中不包含任何自适应功能参数。换句话说,不需要设置optimizer_adaptive_plansoptimizer_adaptive_statistics

把事情简单化!

场景2

从Oracle Database 12c第1版升级,其中应用了21171382和22652097的修补程序。

这两个补丁使Oracle Database 12c第1版数据库能够使用与Oracle Database 12c第2版相同的自适应功能设置。

可以升级带有这些补丁的Oracle Database 12c第1版数据库,而无需更改任何自适应功能设置。

或者,如果没有使用推荐的默认值预升级,并且希望在升级后使用,那么建议如下设置:

  • 从数据库初始化参数文件中删除对optimizer_adaptive_plansoptimizer_adaptive_statistics的引用。
  • 确保使用DBMS_STATS.SET_GLOBAL_PREFS将DBMS_STATS首选项
  • AUTO_STAT_EXTENSIONS设置为OFF

 

场景3

尚未应用从Oracle Database 12c第1版升级以及21171382和22652097的修补程序。

如果在Oracle数据库12c的第1版禁用了自适应功能(通过设置,例如,optimizer_adaptive_features到FALSE),那么而是使用Oracle数据库12c的第2版默认设置。为此,需要检查初始化参数文件,如下所示:

  • 删除对optimizer_adaptive_features参数的引用(它在Oracle Database 12c第2版中已过时)。
  • 删除用于禁用各种自适应功能的任何修复控件和隐藏参数设置。固定控制像12914055,12914055和7452863以隐藏参数等一起被典型地使用_optimizer_dsdir_usage_control_sql_plan_directive_mgmt_control
  • 无需设置optimizer_adaptive_plansoptimizer_adaptive_statistics,因为默认值是建议值。

如果在Oracle Database 12c第1版数据库中启用了自适应功能,并且想在数据库升级后以相同方式继续使用这些功能,则:

  • 从 初始化文件中删除对optimizer_adaptive_features的引用
    (在Oracle Database 12c第2版中已过时)。
  • optimizer_adaptive_statistics = TRUE添加到初始化参数文件中(并且不需要设置optimizer_adaptive_plans,因为默认值为TRUE)。
  • 使用DBMS_STATS.SET_GLOBAL_PREFS将DBMS_STATS首选项
  • AUTO_STAT_EXTENSIONS设置为ON

参考文档:

https://blogs.oracle.com/optimizer/optimizer-adaptive-features-and-upgrading-to-oracle-database-12c-release-2

https://blogs.oracle.com/optimizer/the-oracle-12102-october-2017-bp-and-the-adaptive-optimizer

https://mikedietrichde.com/2017/07/06/adpative-features-patches-oracle-peoplesoft/