檢視sql 執行計劃的歷史變更
檢視sql 執行計劃的歷史變更
oracle 10G 以後可以透過下面的三個檢視查詢到sql執行計劃的歷史資訊:
DBA_HIST_SQL_PLAN
DBA_HIST_SQLSTAT
DBA_HIST_SNAPSHOT
檢視語句的歷史執行資訊,是否發生變化,何時發生了變化。如果發生了變化,找出以前的執行計劃,與當前的執行計劃進行對比,有什麼不同。
使用如下sql 可以發現某個sql的執行計劃什麼時候發生了變化!
select distinct SQL_ID,
PLAN_HASH_VALUE,
to_char(TIMESTAMP, 'yyyymmdd hh24:mi:ss') TIMESTAMP
from dba_hist_sql_plan
where SQL_ID = '68wnxdjxwwn2h'
order by TIMESTAMP;
SQL_ID PLAN_HASH_VALUE TIMESTAMP
------------- --------------- -----------------
68wnxdjxwwn2h 235510920 20111020 21:25:23
68wnxdjxwwn2h 1542630049 20120612 11:57:23
68wnxdjxwwn2h 2754593971 20120612 12:43:34
檢視出來執行計劃的變化之後 可以使用如下sql檢視發生了那些變化!
col options for a15
col operation for a20
col object_name for a20
select plan_hash_value,
id,
operation,
options,
object_name,
depth,
cost,
to_char(TIMESTAMP, 'yyyymmdd hh24:mi:ss')
from DBA_HIST_SQL_PLAN
where sql_id = '68wnxdjxwwn2h'
and plan_hash_value in (1542630049, 2754593971, 2620382595)
order by TIMESTAMP,ID;
PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME COST TO_CHAR(TIMESTAMP
--------------- ---------- --------------------- --------------- --------------------- ---------- -----------------
235510920 0 SELECT STATEMENT 39 20111020 21:25:23
235510920 1 NESTED LOOPS 20111020 21:25:23
235510920 2 NESTED LOOPS 39 20111020 21:25:23
235510920 3 VIEW 11 20111020 21:25:23
235510920 4 WINDOW SORT PUSHED RANK 11 20111020 21:25:23
235510920 5 TABLE ACCESS FULL C_ETL_DATA_VALIDITY 10 20111020 21:25:23
235510920 6 PARTITION LIST ITERATOR 2 20111020 21:25:23
235510920 7 INDEX RANGE SCAN IDX_C_MEM_XXXXXXXX_ID 2 20111020 21:25:23
235510920 8 TABLE ACCESS BY LOCAL INDEX C_MEM_XXXXXXXX_FATDT0 4 20111020 21:25:23
ROWID
1542630049 0 SELECT STATEMENT 7854 20120612 11:57:23
1542630049 1 NESTED LOOPS 7854 20120612 11:57:23
1542630049 2 VIEW 28 20120612 11:57:23
1542630049 3 WINDOW SORT PUSHED RANK 28 20120612 11:57:23
1542630049 4 TABLE ACCESS FULL C_ETL_DATA_VALIDITY 27 20120612 11:57:23
1542630049 5 PARTITION LIST ITERATOR 7826 20120612 11:57:23
1542630049 6 TABLE ACCESS FULL C_MEM_XXXXXXXX_FATDT0 7826 20120612 11:57:23
2754593971 0 SELECT STATEMENT 43 20120612 12:43:34
2754593971 1 PX COORDINATOR 20120612 12:43:34
2754593971 2 PX SEND QC (RANDOM) :TQ10001 20120612 12:43:34
2754593971 3 NESTED LOOPS 20120612 12:43:34
2754593971 4 NESTED LOOPS 43 20120612 12:43:34
2754593971 5 BUFFER SORT 20120612 12:43:34
2754593971 6 PX RECEIVE 20120612 12:43:34
2754593971 7 PX SEND BROADCAST :TQ10000 20120612 12:43:34
2754593971 8 VIEW 28 20120612 12:43:34
2754593971 9 WINDOW SORT PUSHED RANK 28 20120612 12:43:34
2754593971 10 TABLE ACCESS FULL C_ETL_DATA_VALIDITY 27 20120612 12:43:34
2754593971 11 PX PARTITION LIST ITERATOR 2 20120612 12:43:34
2754593971 12 INDEX RANGE SCAN IDX_C_MEM_XXXXXXXX_ID 2 20120612 12:43:34
2754593971 13 TABLE ACCESS BY LOCAL INDEX C_MEM_XXXXXXXX_FATDT0 15 20120612 12:43:34
ROWID
2620382595 0 SELECT STATEMENT 5 20120612 18:27:37
2620382595 1 TABLE ACCESS BY INDEX ROWID C_MEM_XXXXXXXX_BAKUP 5 20120612 18:27:37
2620382595 2 INDEX RANGE SCAN IDX_C_MEM_XXXXXXXX_BA 3 20120612 18:27:37
KUP_ID
33 rows selected.
從上面的結果中可以看出 執行計劃在11:57 時出現改變 C_MEM_XXXXXXXX_FATDT0有之前的index range scan 變為了full table scan!
oracle 10G 以後可以透過下面的三個檢視查詢到sql執行計劃的歷史資訊:
DBA_HIST_SQL_PLAN
DBA_HIST_SQLSTAT
DBA_HIST_SNAPSHOT
檢視語句的歷史執行資訊,是否發生變化,何時發生了變化。如果發生了變化,找出以前的執行計劃,與當前的執行計劃進行對比,有什麼不同。
使用如下sql 可以發現某個sql的執行計劃什麼時候發生了變化!
select distinct SQL_ID,
PLAN_HASH_VALUE,
to_char(TIMESTAMP, 'yyyymmdd hh24:mi:ss') TIMESTAMP
from dba_hist_sql_plan
where SQL_ID = '68wnxdjxwwn2h'
order by TIMESTAMP;
SQL_ID PLAN_HASH_VALUE TIMESTAMP
------------- --------------- -----------------
68wnxdjxwwn2h 235510920 20111020 21:25:23
68wnxdjxwwn2h 1542630049 20120612 11:57:23
68wnxdjxwwn2h 2754593971 20120612 12:43:34
檢視出來執行計劃的變化之後 可以使用如下sql檢視發生了那些變化!
col options for a15
col operation for a20
col object_name for a20
select plan_hash_value,
id,
operation,
options,
object_name,
depth,
cost,
to_char(TIMESTAMP, 'yyyymmdd hh24:mi:ss')
from DBA_HIST_SQL_PLAN
where sql_id = '68wnxdjxwwn2h'
and plan_hash_value in (1542630049, 2754593971, 2620382595)
order by TIMESTAMP,ID;
PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME COST TO_CHAR(TIMESTAMP
--------------- ---------- --------------------- --------------- --------------------- ---------- -----------------
235510920 0 SELECT STATEMENT 39 20111020 21:25:23
235510920 1 NESTED LOOPS 20111020 21:25:23
235510920 2 NESTED LOOPS 39 20111020 21:25:23
235510920 3 VIEW 11 20111020 21:25:23
235510920 4 WINDOW SORT PUSHED RANK 11 20111020 21:25:23
235510920 5 TABLE ACCESS FULL C_ETL_DATA_VALIDITY 10 20111020 21:25:23
235510920 6 PARTITION LIST ITERATOR 2 20111020 21:25:23
235510920 7 INDEX RANGE SCAN IDX_C_MEM_XXXXXXXX_ID 2 20111020 21:25:23
235510920 8 TABLE ACCESS BY LOCAL INDEX C_MEM_XXXXXXXX_FATDT0 4 20111020 21:25:23
ROWID
1542630049 0 SELECT STATEMENT 7854 20120612 11:57:23
1542630049 1 NESTED LOOPS 7854 20120612 11:57:23
1542630049 2 VIEW 28 20120612 11:57:23
1542630049 3 WINDOW SORT PUSHED RANK 28 20120612 11:57:23
1542630049 4 TABLE ACCESS FULL C_ETL_DATA_VALIDITY 27 20120612 11:57:23
1542630049 5 PARTITION LIST ITERATOR 7826 20120612 11:57:23
1542630049 6 TABLE ACCESS FULL C_MEM_XXXXXXXX_FATDT0 7826 20120612 11:57:23
2754593971 0 SELECT STATEMENT 43 20120612 12:43:34
2754593971 1 PX COORDINATOR 20120612 12:43:34
2754593971 2 PX SEND QC (RANDOM) :TQ10001 20120612 12:43:34
2754593971 3 NESTED LOOPS 20120612 12:43:34
2754593971 4 NESTED LOOPS 43 20120612 12:43:34
2754593971 5 BUFFER SORT 20120612 12:43:34
2754593971 6 PX RECEIVE 20120612 12:43:34
2754593971 7 PX SEND BROADCAST :TQ10000 20120612 12:43:34
2754593971 8 VIEW 28 20120612 12:43:34
2754593971 9 WINDOW SORT PUSHED RANK 28 20120612 12:43:34
2754593971 10 TABLE ACCESS FULL C_ETL_DATA_VALIDITY 27 20120612 12:43:34
2754593971 11 PX PARTITION LIST ITERATOR 2 20120612 12:43:34
2754593971 12 INDEX RANGE SCAN IDX_C_MEM_XXXXXXXX_ID 2 20120612 12:43:34
2754593971 13 TABLE ACCESS BY LOCAL INDEX C_MEM_XXXXXXXX_FATDT0 15 20120612 12:43:34
ROWID
2620382595 0 SELECT STATEMENT 5 20120612 18:27:37
2620382595 1 TABLE ACCESS BY INDEX ROWID C_MEM_XXXXXXXX_BAKUP 5 20120612 18:27:37
2620382595 2 INDEX RANGE SCAN IDX_C_MEM_XXXXXXXX_BA 3 20120612 18:27:37
KUP_ID
33 rows selected.
從上面的結果中可以看出 執行計劃在11:57 時出現改變 C_MEM_XXXXXXXX_FATDT0有之前的index range scan 變為了full table scan!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2142876/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle檢視sql_id 的歷史執行計劃OracleSQL
- 如何檢視SQL的執行計劃SQL
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- Oracle檢視歷史TOP SQLOracleSQL
- 檢視SQL執行計劃的幾種常用方法YQSQL
- 檢視 OceanBase 執行計劃
- 達夢資料庫SQL執行計劃檢視方法資料庫SQL
- 檢視一個正在執行的sql的執行計劃(explain for connection processlist_id)SQLAI
- Oracle檢視執行計劃的命令Oracle
- 微課sql最佳化(11) 、如何檢視執行計劃SQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- 【SQL_PLAN】Oracle 透過檢視sql_plan 格式化執行計劃SQLOracle
- 執行計劃-2:檢視更多的資訊
- 查詢SQL Server的歷史執行記錄SQLServer
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- Oracle sql執行計劃OracleSQL
- Oracle錶的歷史統計資訊檢視Oracle
- Oracle如何檢視真實執行計劃(一)Oracle
- git檢視提交歷史Git
- 使用set autotrace on 檢視資料庫執行計劃資料庫
- PostgreSQL執行計劃變化SQL
- [20180322]檢視統計資訊的儲存歷史.txt
- 檢視執行計劃出現ORA-22992錯誤
- [20210114]toad檢視真實執行計劃問題.txt
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- Oracle 變數窺視引起執行計劃異常故障分析Oracle變數
- 檢視mysql執行狀態的一些sqlMySql
- SQL優化案例-改變那些CBO無能為力的執行計劃(一)SQL優化
- [20210205]toad檢視真實執行計劃問題3.txt
- git log檢視提交歷史記錄Git
- git簡略形式檢視提交歷史Git
- Linux檢視歷史記錄小技巧Linux
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- 不會看 Explain執行計劃,勸你簡歷別寫熟悉 SQL優化AISQL優化
- 不會看 Explain 執行計劃,勸你簡歷別寫熟悉 SQL 優化AISQL優化
- 以動畫的方式,快速直觀地檢視 Git 檔案變動歷史動畫Git
- SQL最佳化案例-改變那些CBO無能為力的執行計劃(一)SQL