oracle execute to parse,awr报告中execute to parse 不足40%

da33193121bfc3f9beb3e771389af4d2.png

一、

execute to parse=round(100*(1-prse/exe),2)

round:“四舍六入五取偶”。

prse: the number of prases(including hard parse and soft parse)

exe: the number of executions

Tom关于execute to parse指标的说明是:

1、如果是由于应用引起的execute-to-parse较低,比如,Oracle为一个基于web的应用提供服务,execute-to-parse低于40%。"in this case,it is wholly unavoidable." 。唯一的原因是"each web page is an database session.The sessions are very short,so there is not much chance for reuse of cursors here."。而如果系统是作为一个batch应用系统,那么execute-to-parse指标就应该很高才行,比如95%。

2、判断execute-to-parse指标是否正常的关键点在于,确定系统是什么样的系统。如果是类似于上文提到的web系统,execute-to-parse低于40%是正常的。如果是类似与上文提到的batch系统(批处理系统),execute-to-parse低于95%也可能还低了。

参考文档     《Effective Oracle By Design》 Tomas Kyte

二、

Execute to Parse  =  round(100*(1-:prse/:exe),2)

prse = select value from v$sysstat where name = 'parse count (total)';

exe = select value from v$sysstat where name = 'execute count';

也就是说,这个参数的值,主要是体现 的 解析次数与执行次数的比率。而且这里的解析包括硬解析和软解析、软软解析。

SQL的执行包括几个步骤:打开、解析、绑定、执行、抓取、关闭。

解析的时候确定执行计划,硬解析就是重新生成执行,软解析是在共享池中找到了执行计划,软软解析是让查找执行计划的过程更短、更快。但无论软解析、还是软软解析,都有解析这个操作。

要改善解析与执行的比率关系,就需要增加无解析的次数,无解析就是不再解析,为SQL绑定不同的变量,然后执行。这样做的前提就是:1、不能断开;2、Session执行过解析过的SQL不要关闭;满足这两点就可以实现无解析。

下面,就介绍一个和这个有密切关系的参数:session_cached_cursors

session_cached_cursors,就是说的是一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能。(绑定变量是解决硬解析的问题),软解析同硬解析一样,比较消耗资源.所以这个参数非常重要。

oracle有一个概念,那就是session cursor ,中文描述就是有一块内存区域,用来存储关闭了的cursor。当一个cursor关闭之后,oracle会检查这个cursor的request次数是否超过3次,如果超过了三次,就会放入session cursor cache,这样在下次parse的时候,就可以从session cursor cache中找到这个statement, session cursor cache的也是使用LRU。

session_cached_cursors这个参数是控制session cursor cache的大小的。session_cached_cursors定义了session cursor cache中存储的cursor的个数。这个值越大,则会消耗的内存越多。

另外检查这个参数是否设置的合理,可以从两个statistic来检查。

select name,value from v$sysstat where name like '%cursor%';

select name,value from v$sysstat where name like '%parse%';

session cursor cache hits 和parse count(total) 就是总的parse次数中,在session cursor cache中找到的次数,所占比例越高,性能越好。如果比例比较低,并且有剩余内存的话,可以考虑加大该参数。

到这里,我们就明白了,基于上面的情况,我们应该调整哪个参数,才能真正解决问题。

alter system set session_cached_cursors=100 scope=spfile;

修改后要重启方能生效。

select * from v$parameter where name = 'session_cached_cursors'

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值