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

在Oracle中,如何清除Shared Pool中某条SQL语句?

DB宝 2017-07-04
979



Q
题目如下所示:

在Oracle中,如何清除Shared Pool中某条SQL语句?


     

A
答案如下所示:


如果数据库版本为Oracle 10.2.0.4以前,那么只能清空整个Shared Pool,命令为:“ALTER SYSTEM FLUSH SHARED_POOL;”。在生产库上,该句要慎用。而从Oracle 10.2.0.4开始提供了一个包DBMS_SHARED_POOL,该包可以实现清除Shared Pool中某条SQL语句的功能。若该包没有安装,则可以通过$ORACLE_HOME/rdbms/admin/dbmspool.sql进行安装。

使用这种方法可以精确的将一个SQL从共享池中删除,从而使得Oracle为这个SQL重新生成执行计划。这种方法只针对单个SQL语句,使得解决问题的同时不会造成任何的误伤。

示例如下:

SYS@lhrdb>  SELECT ADDRESS,HASH_VALUE FROM V$SQLAREA WHERE ROWNUM<=1;

ADDRESS          HASH_VALUE

---------------- ----------

0000000092D263D0 3231842444

SYS@lhrdb> EXEC DBMS_SHARED_POOL.PURGE('0000000092D263D0,3231842444','C');--这里的C表示游标(Cursor

PL/SQL procedure successfully completed.

SYS@lhrdb> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA WHERE ADDRESS='0000000092D263D0' AND HASH_VALUE='3231842444';

no rows selected


清除Shared Pool中某条SQL语句无非是让目标SQL语句重新进行硬解析,其实重新进行硬解析的方法还有如下两种:

① 使用DDL操作可以让Oracle再次执行目标SQL时使用硬解析新产生一个子游标,但这种方法的弊端在于其影响范围还是太广了,因为一旦对某个表执行了DDL操作,库缓存中所有在SQL文本中包含了这个表的Shared Cursor都会被Oracle标记为失效(INVALID),这意味着这些Shared Cursor中存储的解析树和执行计划将不再能被重用,再次执行与这个表相关的所有SQL时就会全部使用硬解析。这是很不好的,特别是对于OLTP类型的应用系统而言,这可能会导致短时间内的硬解析数量剧增,进而影响系统的性能。尽管如此,有时仍然会采用这种方法。这里的DDL操作有很多种,通常选择添加注释的COMMENT语句(“COMMENT ON TABLE TB_NAME IS 'xxx by lhr';”),因为使用COMMENT添加注释也是DDL操作,但同时对系统的影响相对而言比较小。

② 在重新收集统计信息时指定NO_INVALIDATE=>FALSE选项。如果取值为FALSE那么表示统计信息对象相关的所有Cursor全部失效目标SQL语句在下次执行时就会使用硬解析。

& 说明:

有关DBMS_SHARED_POOL.PURGE的更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-2129896/有关NO_INVALIDATE可以参考:http://blog.itpub.net/26736162/viewspace-2139300/



DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:230161599

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


最后修改时间:2020-01-10 21:07:20
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论