达梦8通过清理缓存中的执行计划来生成新的执行计划的方法

执行计划缓存是在SQL文本不变的情况下,哪怕收集完统计信息后,优化器做计划时,会生成高效的计划了,但是实际上,我们的语句还是慢。

这是因为,在数据执行SQL文本不变这个SQL时,很久以前(统计信息不对的时候),已经生成过计划了,数据库不会再生成计划了。所以:总是我们看的计划是好的,但是应用在执行时(或者我们执行原先文本严格一致的SQL时),效率也不好。

这个时候我们可以这么处理:

  1. 等,等之前不好的执行计划被淘汰。这个就比较随缘,也不是建议的方式。这个也是为什么,有时候有的人会说:要过一段时间在生效的原因。

正确的方式如下:

  1. 我们找到目标SQL的执行计划,通过下面的方式,清空掉这条计划的缓存即可。
 

--通过这个SQL,我们找到有问题的SQL的执行计划 select  * from V$CACHEPLN where sqlstr like '%select act9x0_.BAZ614 as BAZ%' --获取到对应的 CACHE_ITEM ,把这个 CACHE_ITEM 替换掉下面括号里面的内容,然后执行下面的SQL即可: CALL SP_CLEAR_PLAN_CACHE(2305843184700604576 );

复制

当然,有时候,在一般的非核心应用系统里面,我们偷懒,也可以这样:

  1. 为涉及到的表做个ddl,可以是新增索引啥的(表比较小的时候),数据库会自动失效这个表涉及到的所有的计划缓存。

说明:这里大家看出来没,收集统计信息不是DDL操作。


当然,如果清理执行计划还不行,可以考虑择机重启应用;一般不需要如此操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值