暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何删除指定SQL的执行计划

原创 王艳东 2022-08-20
959

当一条SQL存在一个不佳的执行计划,想把它删除掉,可以有如下两种方法:

方法一:刷新共享池,所有的SQL都会硬解析

SQL> alter system flush shared_pool;


方法二:指定sql的执行计划 flush

例如:

执行一条示例SQL

SQL> select /* mywish1 */ 1 from dual;

1
----------
1


通过SQL文本查询出SQL对应的 ADDRESS 和 HASH_VALUE,如果已知SQL_ID可以直接用SQL_ID查

SQL> select sql_id, address, hash_value, sql_text from gv$sqlarea sqlarea where sql_text like '%mywish1%' and sql_text not like '%from gv$sqlarea%';

SQL_ID             ADDRESS                    HASH_VALUE      SQL_TEXT
-------------     -------------------             ----------      ------------------------------------------------------------------------------
9afvnz59gt9k1 00000014519560E0     1392289345 select /* mywish1 */ 1 from dual


清除掉 ADDRESS=00000014519560E0,HASH_VALUE=1392289345 的执行计划

SQL> exec SYS.DBMS_SHARED_POOL.PURGE ('00000014519560E0, 1392289345', 'C');
PL/SQL procedure successfully completed.


再次查询该执行计划已经没有了,再次执行就会硬解析生成新的执行计划

SQL> select sql_id, address, hash_value, sql_text from gv$sqlarea sqlarea where sql_text like '%mywish1%' and sql_text not like '%from gv$sqlarea%';

no rows selected


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论