Oracle 通過註釋改變執行計劃
Oracle 通過註釋改變執行計劃
一:問題現象
T_XXX 表同步延時 1 小時,其它表同步速度正常 ;
主要慢在同步時的一個 delete T_XXX 語句上,單條執行耗時 12 秒;
二:問題原因
T_XXX 表存在唯一性索引,理論上速度很快;
檢視 T_XXX 表存在 delete 行級觸發器,檢視觸發器邏輯,發現觸發器內一個 update 語句特別慢;
UPDATE CHENJCH.T_CHENJCH_RISK ..where RISK_ID ....
檢視執行計劃, update 語句走全表掃描,速度很慢,通過 hint 強制走主鍵索引,速度特別快;
為什麼執行計劃不走主鍵?
檢視 T_CHENJCH_RISK 表統計資訊顯示錶有 0 行資料,但是實際上有 200 萬行資料;
由於資料同步時 T_CHENJCH_RISK 表存在大量的 delete/update/insert 操作,上次收集統計資訊時正好這個表裡沒有資料,但是經過幾天的資料同步後,表裡的資料量發生了很大變化,統計資訊也不是實時進行收集,最終導致生成較差的執行計劃;
解決方案:
嘗試刪除 T_CHENJCH_RISK 表統計資訊,讓資料庫通過動態取樣實時的收據資訊,但是執行計劃沒有變,還是走全表掃描,速度沒有提高;
begin
dbms_stats.delete_table_stats(ownname => 'CHENJCH', tabname => 'T_CHENJCH_RISK');
end;
嘗試重新收集 T_CHENJCH_RISK 表統計資訊,讓資料庫通過動態取樣實時的收據資訊,但是執行計劃沒有變,還是走全表掃描,速度沒有提高;
begin
DBMS_STATS.GATHER_TABLE_STATS('CHENJCH',
'T_CHENJCH_RISK',
estimate_percent => 100,
method_opt => 'FOR ALL INDEXED COLUMNS',
degree => 6,
CASCADE => TRUE);
end;
為什麼執行計劃沒有變?
(資料庫版本 Oracle 12.2.0.1.0)
因為
SQL
語句存在繫結變數,
SQL
文字沒有變,導致執行計劃也沒有發生變化;
通過對錶 T_CHENJCH_RISK 新增和刪除註釋,可以讓資料庫重新生成執行計劃;
comment on column CHENJCH.T_CHENJCH_RISK.RISK_ID is 'PK_T_CHENJCH_RISK';
comment on column CHENJCH.T_CHENJCH_RISK.RISK_ID is '';
檢視新生成的執行計劃, T_CHENJCH_RISK 已經開始走主鍵索引了,速度有明顯提升;
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2154445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle優化案例-改變那些CBO無能為力的執行計劃(一)Oracle優化
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- PostgreSQL執行計劃變化SQL
- mongodb執行計劃解釋MongoDB
- Oracle調優之看懂Oracle執行計劃Oracle
- Oracle-繫結執行計劃Oracle
- Oracle 變數窺視引起執行計劃異常故障分析Oracle變數
- Oracle執行計劃Explain Plan 如何使用OracleAI
- Oracle檢視執行計劃的命令Oracle
- oracle使用outline固定執行計劃事例Oracle
- 【CURSOR】Oracle繫結變數、執行計劃對遊標的影響Oracle變數
- 執行計劃-3:解釋規則
- Oracle緊急固定執行計劃之手段Oracle
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- SQL優化案例-改變那些CBO無能為力的執行計劃(一)SQL優化
- 執行計劃-1:獲取執行計劃
- MySQL explain執行計劃詳細解釋MySqlAI
- 知識篇 | ORACLE 如何執行計劃繫結Oracle
- Oracle如何檢視真實執行計劃(一)Oracle
- Oracle如何手動重新整理執行計劃Oracle
- SQL最佳化案例-改變那些CBO無能為力的執行計劃(一)SQL
- Oracle 9i變數窺視引起執行計劃異常故障報告Oracle變數
- 通過鎖定表的統計資訊來穩定sql的執行計劃SQL
- [20231210]執行計劃與繫結變數.txt變數
- oracle中通過decode實現行變列的二維表統計展示Oracle
- 【SQL_PLAN】Oracle 透過檢視sql_plan 格式化執行計劃SQLOracle
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- 在Oracle中,如何得到真實的執行計劃?Oracle
- 執行計劃沒變,執行時快時慢是怎麼回事?
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- SYBASE執行計劃
- MySQL 執行計劃MySql
- MySQL執行計劃MySql
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- 【TUNE_ORACLE】定製化執行計劃SQL參考OracleSQL