執行計劃中Cardinality (Estimated Rows, E-Rows) 估算錯誤原因分析

tolywang發表於2014-12-29
http://structureddata.org/2007/11/21/troubleshooting-bad-execution-plans/  

1.  Data skew : NDV (Number of distinct values) inaccurate due to data skew and a poor dbms_stats sample? 
Data correlation: Are two or more predicates related to each other? 
Out-of-range values: Is the predicate within the range of known values? 
Use of functions in predicates: Is the 5% cardinality guess for functions accurate? 
Stats gathering strategies: Is your stats gathering strategy yielding representative stats?  

Some possible solutions to these issues are:  

Data skew (資料傾斜):  選擇一個sample size得出正確的 NDV (Number of distinct values). 11g中使用DBMS_STATS.AUTO_SAMPLE_SIZE
                 直方圖也是一個選項 。 
                 
Data correlation (資料相關):   當謂詞使用多個相關列(correlated column)時,會導致約束條件的冗餘。這幾個相關的列也被稱作關聯列。
                出現這種情況時,查詢最佳化器也可能會做出不準確的判斷,在11g中可以使用 Extended Stats收集基於表示式或者一組列上
                的物件統計資訊和直方圖,從而解決這種問題. 如果版本<= 10.2.0.3 可以使用 CARDINALITY hint . 
                
Out-of-range values:  謂詞在所知值的範圍之外,需要收集或手工設定statistics。

Use of functions in predicates:   謂詞中使用函式。在可能的地方使用 CARDINALITY hint 。
 
Stats gathering strategies:  資料收集策略是否產生具有代表性的統計資訊。嘗試使用AUTO_SAMPLE_SIZE. Adjust only where necessary. 
                         Be mindful of tables with skewed data.

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

相關文章