Oracle修改查询优化器版本
查询优化器参数optimizer_features_enable
在每个数据库版本中,Oracle都会在查询优化器中引入或启用新的特性。
如果在升级到一个新的版本后希望保留查询优化器的行为,可以通过设置这个参数或语句级别使用hint。
不同版本优化器的差异https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams168.htm#REFRN10141
SQL> select value from v$parameter_valid_values where name ='optimizer_features_enable';
VALUE
--------------------------------------------------------------------------------
8.0.0
8.0.3
8.0.4
8.0.5
8.0.6
8.0.7
8.1.0
8.1.3
8.1.4
8.1.5
8.1.6
VALUE
--------------------------------------------------------------------------------
8.1.7
9.0.0
9.0.1
9.2.0
9.2.0.8
10.1.0
10.1.0.3
10.1.0.4
10.1.0.5
10.2.0.1
10.2.0.2
VALUE
--------------------------------------------------------------------------------
10.2.0.3
10.2.0.4
10.2.0.5
11.1.0.6
11.1.0.7
11.2.0.1
11.2.0.2
11.2.0.3
11.2.0.4
12.1.0.1
12.1.0.2
VALUE
--------------------------------------------------------------------------------
12.2.0.1
12.2.0.1.1
35 rows selected.
很多人会遇到11g升级到12c后,报表及ETL性能严重下降
检查SQL执行计划,发现同一个SQL,12c生成的执行计划跟11g的执行计划差异很大。
把参数 OPTIMIZER_FEATURES_ENABLE 调回11g之后,报表及ETL的性能问题消失。因此怀疑是Oracle 12c优化器的问题导致
SQL>show parameter optimizer_features_enable
ALTER SYSTEM SET optimizer_features_enable = '11.2.0.4';