优化器自适应特性的设置是需要考虑比较慎重的一个点,oracle的产品经理 Nigel Bayliss 也公布了几篇关于此方面的设置参考,具体如下(建议看下参考文档):
情景1
从Oracle Database 11g(或更早版本)升级
将数据库升级到Oracle Database 12c第2版后,建议使用默认的自适应功能设置。为此,只需在数据库的初始化参数文件中不包含任何自适应功能参数。换句话说,不需要设置optimizer_adaptive_plans或optimizer_adaptive_statistics。
把事情简单化!
场景2
从Oracle Database 12c第1版升级,其中应用了21171382和22652097的修补程序。
这两个补丁使Oracle Database 12c第1版数据库能够使用与Oracle Database 12c第2版相同的自适应功能设置。
可以升级带有这些补丁的Oracle Database 12c第1版数据库,而无需更改任何自适应功能设置。
或者,如果没有使用推荐的默认值预升级,并且希望在升级后使用,那么建议如下设置:
- 从数据库初始化参数文件中删除对optimizer_adaptive_plans和optimizer_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_plans和optimizer_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/