种地 发表于 4 天前

快速定位达梦缓存的实行计划并清理

开发告诉你一个sql慢,你想看看缓存中实行计划时,怎么精准快速定位?
可能一般人通过文本内容模糊搜索
select cache_item, substr(sqlstr,1,60)stmt from v$cachepln where sqlstr like '%YOUR SQL STRING%';
https://i-blog.csdnimg.cn/direct/c2697e5579ac425998fbc1e03b3aee3a.png
搜出来的内容比力多,研究一下实行计划缓存表
https://i-blog.csdnimg.cn/direct/44d5b27d23b44495a8aef3752fa48358.png
要快一点的技巧是增长几个条件,如:实行用户、表数量、列数量(最外层)
https://i-blog.csdnimg.cn/direct/e9c325358b9d4861ae84880d1372742f.png
https://i-blog.csdnimg.cn/direct/5d5997f7f6e640289d0f5a21160b1911.png
加上些已知条件剩余的就少了一些
select cache_item, substr(sqlstr,1,60)stmt from v$cachepln where sqlstr like '%from t1%' and n_table=1 and n_cols=1;
https://i-blog.csdnimg.cn/direct/65164e97b5484295ab2138196e7b6473.png
定位到想要的sql后,下一步看看缓存的实行计划
alter session set events 'immediate trace name plndump level &id, dump_file ''/home/dmdba/dump_plan_&id..log''';

https://i-blog.csdnimg.cn/direct/fc861c06b60b468dbeabccb46bbc36d6.png
看输出内容 cat dump_plan_140726259863656.log
https://i-blog.csdnimg.cn/direct/a0ef3adaa3c64726a142e688b098866a.png
与现实的计划比力
https://i-blog.csdnimg.cn/direct/5cef08c40de449bab93777305114342c.png
一样一样的。
不一样怎么办?
有可能(我是说有可能)通过jdbc实行走旧的实行计划,而通过disql实行走新的实行计划。
方法一:通常是清理掉缓存中的计划
call sp_clear_plan_cache(pln号);---不加 pln 就是清理所有 sql 缓存
https://i-blog.csdnimg.cn/direct/74ca4f6956004551b6b26f8ccf2b9f64.png
清理后会重新生成。
https://i-blog.csdnimg.cn/direct/8f7aadd25f6b4589aba4884b1d3c4d13.png
方法二:还可以通过对表加解释comment,触发ddl使得重新生成实行计划(有点儿眼熟)
https://i-blog.csdnimg.cn/direct/a7a8d38ed4014c199324a4fdeafb5710.png
方法三:着实不行就重启实例。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 快速定位达梦缓存的实行计划并清理