如何清除某條SQL在庫快取中的執行計劃
DBA 日常管理過程中會遇到需要把特定的sql語句的執行計劃從shared pool 中清除或者需要重新生產新的執行計劃的要求。通常的alter system flush shared_pool;或者重新執行資訊統計又會造成較大的影響,所以可以使用oracle提供的
dbms_shared_pool.purge 來清除某個特定的sql的執行計劃。
下面是關於dbms_shared_pool.purge 的官方介紹:
The syntax for the DBMS_SHARED_POOL.PURGE package is:
procedure purge (name varchar2, flag char DEFAULT 'P', heaps number DEFAULT 1);
name: 指定要處理的物件的名稱,有兩種情況:
1 PL/SQL 物件 就是物件的名稱
2 SQL物件,指定 'address','hash_value' 的 SQL 遊標。
標記位 flag是可選的。如果忽略了該引數,則該包預設是包,過程,函式的名稱並且忽視名稱。否則,該引數就指定一個物件型別。標記位是大小寫敏感的。
標記位代表的物件型別:
Value Kind of Object to keep
----- ----------------------
P package/procedure/function
Q sequence
R trigger
T type
JS java source
JC java class
JR java resource
JD java shared data
C cursor --遊標
heaps: heaps to purge. e.g if heap 0 and heap 6 are to be purged.
1<<0 | 1<<6 => hex 0x41 => decimal 65. so specify heaps=>65.
Default is 1 i.e heap 0 which means the whole object will be purged.
實驗環境 版本:11.2.0.1.0 dbms_shared_pool.purge 只能透過dba才能使用
/home/oracle>sqlplus yang/yang
SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 8 15:32:43 2011
table yangtab (id int) ;
Table created.
* from yangtab;
no rows selected
address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangtab%';
ADDRESS HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
00000001736EFBB8 3337951036 1 1
dbms_shared_pool.purge('00000001736EFBB8,3337951036','C');
BEGIN dbms_shared_pool.purge('00000001736EFBB8,3337951036','C'); END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'DBMS_SHARED_POOL.PURGE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
/as sysdba
Connected.
table yangt (id int);
Table created.
* from yangt;
no rows selected
address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangt%';
ADDRESS HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
00000001736EFBB8 3337951036 1 1 -- 使用普通使用者時生成的。
0000000170D9BA50 2693392179 1 1
使用dbms_shared_pool.purge 刪除第一個sql的遊標。
dbms_shared_pool.purge('00000001736EFBB8,3337951036','C');
PL/SQL procedure successfully completed.
address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangt%';
ADDRESS HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
0000000170D9BA50 2693392179 1 1
dbms_shared_pool.purge('0000000170D9BA50,2693392179','C');
PL/SQL procedure successfully completed.
address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangt%'
no rows selected
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-701711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一條SQL語句在MySQL中如何執行的MySql
- 批次殺執行某條sql的sessionSQLSession
- 一條sql語句在mysql中是如何執行的MySql
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- 如何檢視SQL的執行計劃SQL
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 在Oracle中,如何得到真實的執行計劃?Oracle
- 如何在SpringBoot中清除所有快取 ?Spring Boot快取
- 執行計劃-1:獲取執行計劃
- MOGDB/openGauss資料庫執行計劃快取/失效機制的測試資料庫快取
- 利用SSIS在SQL Azure中執行計劃任務(下)KCSQL
- 利用SSIS在SQL Azure中執行計劃任務(上)DJSQL
- Oracle sql執行計劃OracleSQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- macOS 中清除 DNS 快取MacDNS快取
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- 清除 Electron 中的快取資料快取
- 如何快速清除 Ubuntu 的系統快取Ubuntu快取
- 達夢資料庫SQL執行計劃檢視方法資料庫SQL
- 如何閱讀PG資料庫的執行計劃資料庫
- 在Mysql中執行一條SQL,會經歷什麼?MySql
- 使用sql monitor獲取更加詳細的執行計劃 - dbms_sqltune.report_sql_monitorSQL
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- MySql中執行計劃如何來的——Optimizer TraceMySql
- 獲取執行計劃之Autotrace
- 一條update SQL語句是如何執行的SQL
- 一條SQL更新語句是如何執行的SQL
- 一條SQL更新語句是如何執行的?SQL
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- SqlServer的執行計劃如何分析?SQLServer
- 在Linux中,如何備份某個使用者的任務計劃?Linux
- 一條更新的SQL語句是如何執行的?SQL
- PostgreSQL 查詢當前執行中sql的執行計劃——pg_show_plans模組SQL
- 如何更好的解讀QianBase MPP資料庫執行計劃資料庫
- 微課sql最佳化(11) 、如何檢視執行計劃SQL
- 一條 SQL 查詢語句是如何執行的?SQL