執行計劃不穩定的原因分析

Jujay發表於2012-02-14
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)使用繫結變數時傳過來的值發生了變化(即繫結變數窺視)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-716277/,如需轉載,請註明出處,否則將追究法律責任。

相關文章