一. 背景:
应用中执行sql很慢,DM管理工具执行很快,同样的SQL,不涉及变量参数传递
可能原因:数据库缓存中的计划不对
二. 怎么查看缓存中的执行计划呢?
--先确认sql对应的执行计划缓存号cache_item
select cache_item,sqlstr,* from v$cachepln where sqlstr like '%SQL语句片段%' ;
--假定cache_item=140036430305392
Alter session set events 'immediate trace name plndump,level 140036430305392';
如何获知数据库实例目录路径
通过ps -ef |grep dmserver 可获知,后面的ini文件所在目录即是实例的路径
查看缓存计划文件长啥样?
清理计划
如果发现缓存计划不对,则通过以下语句清理缓存中对应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;
文章
阅读量
获赞