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) 编辑 收藏 举报