執行計劃不穩定的原因分析
CBO主要的輸入有3種:統計資訊、環境變數和SQL語句。上面任何一種發生變化,執行計劃都有可能發生變化。
1. 統計資訊的變化
在10g和11g中,在預設情況下都有一個在晚上執行的後臺job收集新的統計資訊,如果沒有禁用這個job,也就意味著統計資訊每天都在自動更新,有可能導致執行計劃的突然改變。
在10g和11g中,dbms_stats的no_invalidate預設設定為dbms_stats.auto_invalidate,意味著新的統計資訊收集完畢後,與該表相關的遊標不回立即失效,而是在接下來的5小時內的某個隨機時間點上失效。
2. 執行環境的變化
有很多優化器引數會影響成本的計算,有些引數的值是基於資料庫所在伺服器的物理特性自動計算的,這就是為什麼有時候很難在開發或測試環境中得出與生產環境相匹配的執行計劃。
3. SQL語句的變化
以下兩個原因可能會導致語句的文字沒變而優化器評估的實際SQL語句卻發生了變化:
1)引用的底層檢視發生了變化;
2)使用繫結變數時傳過來的值發生了變化(即繫結變數窺視)。
1. 統計資訊的變化
在10g和11g中,在預設情況下都有一個在晚上執行的後臺job收集新的統計資訊,如果沒有禁用這個job,也就意味著統計資訊每天都在自動更新,有可能導致執行計劃的突然改變。
在10g和11g中,dbms_stats的no_invalidate預設設定為dbms_stats.auto_invalidate,意味著新的統計資訊收集完畢後,與該表相關的遊標不回立即失效,而是在接下來的5小時內的某個隨機時間點上失效。
2. 執行環境的變化
有很多優化器引數會影響成本的計算,有些引數的值是基於資料庫所在伺服器的物理特性自動計算的,這就是為什麼有時候很難在開發或測試環境中得出與生產環境相匹配的執行計劃。
3. SQL語句的變化
以下兩個原因可能會導致語句的文字沒變而優化器評估的實際SQL語句卻發生了變化:
1)引用的底層檢視發生了變化;
2)使用繫結變數時傳過來的值發生了變化(即繫結變數窺視)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-716277/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過shell指令碼來得到不穩定的執行計劃指令碼
- 通過shell指令碼來得到不穩定的執行計劃指令碼
- ORALCE的執行計劃穩定性
- 伺服器不穩定的原因伺服器
- 通過鎖定表的統計資訊來穩定sql的執行計劃SQL
- ORALCE的執行計劃穩定性(zt)
- 理解mouseover和mouseout“不穩定”的原因
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 怎麼穩固執行計劃<轉>
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- explain執行計劃分析AI
- SQL執行計劃分析SQL
- SqlServer的執行計劃如何分析?SQLServer
- oracle 執行計劃設定Oracle
- sql最佳化:使用儲存提綱穩定sql執行計劃SQL
- DB2執行計劃分析DB2
- 【優化】ORACLE執行計劃分析優化Oracle
- phpsimplexml_load_file函式執行不穩定PHPXML函式
- 執行計劃中Cardinality (Estimated Rows, E-Rows) 估算錯誤原因分析
- Oracle檢視正在執行的SQL以及執行計劃分析OracleSQL
- [20120104]穩定一條sql語句的執行計劃.txtSQL
- Job不能執行原因分析
- 執行計劃-1:獲取執行計劃
- set autotrace on 產生不準確的執行計劃
- mysql 執行計劃索引分析筆記MySql索引筆記
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- truncate table執行很慢的原因分析
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- ORACLE關於執行計劃的簡要分析Oracle
- pl/sql developer 分析的執行計劃不可信SQLDeveloper
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 執行計劃
- 為什麼該SQL的執行計劃不走索引???SQL索引
- SQL的執行計劃SQL
- 執行計劃的理解.
- 統計分析中不恰當method_opt使用可能造成執行計劃問題
- SAP系統執行慢的原因分析