注册
如果查看某sql在达梦内存中的计划及怎么清理缓存计划
技术分享/ 文章详情 /

如果查看某sql在达梦内存中的计划及怎么清理缓存计划

Paige 2022/10/21 3679 3 0

一. 背景:
应用中执行sql很慢,DM管理工具执行很快,同样的SQL,不涉及变量参数传递
可能原因:数据库缓存中的计划不对

二. 怎么查看缓存中的执行计划呢?

  1. 确认缓存号
--先确认sql对应的执行计划缓存号cache_item
select cache_item,sqlstr,* from v$cachepln where sqlstr like '%SQL语句片段%' ;
  1. 打印内存中的缓存计划
    执行以下命令,打印出缓存计划到默认路径,默认路径在数据库实例目录的trace文件夹中
--假定cache_item=140036430305392
Alter session set events 'immediate trace name plndump,level 140036430305392';
  1. 如何获知数据库实例目录路径
    通过ps -ef |grep dmserver 可获知,后面的ini文件所在目录即是实例的路径
    image.png

  2. 查看缓存计划文件长啥样?
    image.png

  3. 清理计划
    如果发现缓存计划不对,则通过以下语句清理缓存中对应sql的执行计划

--假定需清理的缓存号为140036430305392
sp_clear_plan_cache('140036430305392');

如需批量删除,执行以下脚本

begin
for rs in
(
select * from v$cachepln where sqlstr like '%SQL语句%'
)
loop
execute immediate 'sp_clear_plan_cache(' ||rs.cache_item ||');';
end loop;
end;
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服