oracle optimizer_features_enable,Oracle OFE (OPTIMIZER_FEATURES_ENABLE)  参数 说明

Oracle 数据库版本一直在不断迭代,其中一些重要的特性也在不断的引入,包括数据库SQL引擎也在不断的优化。https://www.cndba.cn/dave/article/4352

Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),其中OFE (OPTIMIZER_FEATURES_ENABLE) 优化器参数就一个与版本新特性非常相关的重要的参数,该参数控制着优化器的行为。 https://www.cndba.cn/dave/article/4352https://www.cndba.cn/dave/article/4352

官方手册里对这个参数也有说明,如下:

OPTIMIZER_FEATURES_ENABLE acts as an umbrella parameter for enabling a series of optimizer features based on an Oracle release number.https://www.cndba.cn/dave/article/4352

For example, if you upgrade your database from release 11.1 to release 12.1, but you want to keep the release 11.1 optimizer behavior, you can do so by setting this parameter to 11.1.0.6. At a later time, you can try the enhancements introduced in releases up to and including release 12.1 by setting the parameter to 12.1.0.2.

在19c 中该参数的默认值是19.1.0. 我们可以在syste 和 session 级别进行修改。

https://www.cndba.cn/dave/article/4352

官方手册对这个参数的描述也很清楚,这个参数的存在实际上也是解决我们在数据库升级过程中带来的性能问题。 因为不同的Oracle 版本引擎特性不一样,比如我们原来的生产环境是在Oracle 11g的环境中开发和运行的。 后来升级到19c 之后,SQL性能出现问题,或者SQL 语法执行报错。 那么这很可能就是新特性导致的问题。 https://www.cndba.cn/dave/article/4352

所以生产环境在升级版本之前,都会进行大量的测试工作,以检查原环境能否在新版本中正常运行。 其实从数据迁移的角度来看,迁移数据或者升级版本都是很短的过程,其中的风险也相对较小。 升级版本带来的最大风险就是原SQL 在新版本中运行有问题。https://www.cndba.cn/dave/article/4352

如果遇到这种情况,我们一般要针对具体的SQL进行分析,比如新环境的统计信息是否准确,必要时也可以借助辅助工具,比如SQLHC 对SQL 进行分析,通过对比找出新版本和旧版本之间的差异,解决SQL的问题。 如果短时间内无法正常运行,并且又影响到了系统的运行,那么就可以修改本篇所讲的参数:OFE (OPTIMIZER_FEATURES_ENABLE)。

OPTIMIZER_FEATURES_ENABLE = { 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 | 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 | 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 | 12.2.0.1 | 18.1.0 | 19.1.0 | 20.1.0 | 21.1.0 }

设置之后,数据库就会使用对应版本的优化器来执行SQL语句。比如在19c 的实例中将参数设置为11.2.0.4,即使软件是19c,但优化器采用的行为确实11.2.0.4的,这样可以临时解决了性能问题。

注意降低该参数版本,也会禁止掉新版本的优化器特性,从而无法发挥新版本的优势,所以该参数仅用来临时解决问题,或者用来对比不同数据库版本的差异。

修改OFE (OPTIMIZER_FEATURES_ENABLE) 的两种方法如下:

1. 使用SQL 修改:

SQL>alter system set optimizer_features_enable='11.2.0.4' scope=spfile;

SQL>alter session set optimizer_features_enable='11.2.0.4';

2. 在SQL 语句中添加hint:

SQL>SELECT /*+ optimizer_features_enable('11.2.0.4') */ NAME FROM cndba;

优化器相关的参数可以通过如下SQL 查询:

https://www.cndba.cn/dave/article/4352

https://www.cndba.cn/dave/article/4352

select x.ksppinm name,

y.ksppstvl value,

y.ksppstdf isdefault,

decode(bitand(y.ksppstvf, 7),

1,

'MODIFIED',

4,

'SYSTEM_MOD',

'FALSE') ismod,

decode(bitand(y.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadj

from sys.x$ksppi x, sys.x$ksppcv y

where x.inst_id = userenv('Instance')

and y.inst_id = userenv('Instance')

and x.indx = y.indx

and x.ksppinm like '%opt%';

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值