oralce sql 缓存查询及删除

--缓存查询语句 V$SQLAREA 视图记录sql 执行情况(加载次数/用时/Id....)

常用字段

ADDRESS:SQL语句在SGA中的地址。 

这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。 
PARSING_USER_ID:为语句解析第一条CURSOR的用户 
VERSION_COUNT:语句cursor的数量 
KEPT_VERSIONS: 
SHARABLE_MEMORY:cursor使用的共享内存总数 
PERSISTENT_MEMORY:cursor使用的常驻内存总数 
RUNTIME_MEMORY:cursor使用的运行时内存总数。 
SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符)。 
MODULE,ACTION:使用了DBMS_APPLICATION_INFO时session解析第一条cursor时的信息 
SQL_FULLTEXT :完整的sql语句
SELECT ADDRESS,HASH_VALUE,SQL_FULLTEXT FROM V$SQLAREA

查看某条sql 缓存记录 eg:

SELECT ADDRESS,HASH_VALUE,SQL_FULLTEXT,ELAPSED_TIME FROM V$SQLAREA  WHERE sql_fulltext like '%from template_data_temp t%';

 

 --清除某条记录 

参数1:ADDRESS
参数2:HASH_VALUE
参数3:c

第三个参数'C'表示PURGE的对象是CURSOR(游标),不过实际上这里可以使用除了P(PROCEDURE/FUNCTION/PACKAGE)、T(TYPE)、R(TRIGGER)和Q(SEQUENCE)的任何值。
    使用这种方法,就可以精确的将一个SQL从共享池中删除,从而使得Oracle为这个SQL重新生成执行计划。这种方法只针对单个SQL语句,使得解决问题的同时不会造成任何的误伤。

exec sys.dbms_shared_pool.purge('0000000061B5EAD0,772411230','c');

--清空所有计划缓存   生产环境服务器负载较大时 慎用 同时删除清空所有缓存可能造成服务器压力过大

ALTER SYSTEM FLUSH SHARED_POOL

 

posted on 2021-04-27 17:56  天道酬勤,学无止境  阅读(1025)  评论(0编辑  收藏  举报

导航