--緩存查詢語句 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