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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql執行計劃是否改變SQL
- 使用hint改變執行計劃
- oracle 執行計劃變更Oracle
- 11g 改變SQL執行計劃SQL
- 利用coe_xfr_sql_profile 改變執行計劃SQL
- 配置oracle 解釋執行計劃--explain planOracleAI
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- ORACLE執行計劃Oracle
- Oracle優化案例-改變那些CBO無能為力的執行計劃(一)Oracle優化
- 使用rownum改變執行計劃的一個典型情況
- 11g改變了DELETE語句的執行計劃delete
- 通過內部的hint來控制執行計劃
- PostgreSQL執行計劃變化SQL
- mongodb執行計劃解釋MongoDB
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 加hint改變執行計劃訪問順序優化sql優化SQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle 索引和執行計劃Oracle索引
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle
- 執行計劃變化的處理
- Oracle 變數窺視引起執行計劃異常故障分析Oracle變數
- 【Oracle】如何檢視sql 執行計劃的歷史變更OracleSQL
- 通過執行計劃中的CONCATENATION分析sql問題SQL
- 通過shell指令碼來得到不穩定的執行計劃指令碼
- 通過分析SQL語句的執行計劃優化SQL 二SQL優化
- 通過等待事件來獲得查詢SQl的執行計劃事件SQL
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- 執行計劃-3:解釋規則
- Oracle-繫結執行計劃Oracle
- 【SPM】Oracle如何固定執行計劃Oracle