开发告诉你一个sql慢,你想看看缓存中实行计划时,怎么精准快速定位?
可能一般人通过文本内容模糊搜索
- select cache_item, substr(sqlstr,1,60)stmt from v$cachepln where sqlstr like '%YOUR SQL STRING%';
复制代码
搜出来的内容比力多,研究一下实行计划缓存表
要快一点的技巧是增长几个条件,如:实行用户、表数量、列数量(最外层)
加上些已知条件剩余的就少了一些
- select cache_item, substr(sqlstr,1,60)stmt from v$cachepln where sqlstr like '%from t1%' and n_table=1 and n_cols=1;
复制代码
定位到想要的sql后,下一步看看缓存的实行计划
- alter session set events 'immediate trace name plndump level &id, dump_file ''/home/dmdba/dump_plan_&id..log''';
复制代码
看输出内容 cat dump_plan_140726259863656.log
与现实的计划比力
一样一样的。
不一样怎么办?
有可能(我是说有可能)通过jdbc实行走旧的实行计划,而通过disql实行走新的实行计划。
方法一:通常是清理掉缓存中的计划
- call sp_clear_plan_cache(pln号);---不加 pln 就是清理所有 sql 缓存
复制代码
清理后会重新生成。
方法二:还可以通过对表加解释comment,触发ddl使得重新生成实行计划(有点儿眼熟)
方法三:着实不行就重启实例。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |