real-world performance學習筆記之 optimizer expose

棉花糖ONE發表於2009-11-18

1.Data skew

cbo預設是按照平均的方式來評估card,當資料傾斜的時候,預設的評估

方式存在問題,因此oracle引入了直方圖來解決這個問題

2.bind peeking

oracle 9i中引入bind peeking,對於等值查詢,如果查詢欄位存在直方圖的情況下,

當第一次解析的時候,oracle將會做bind peeking,oracle用具體繫結變數的值代入

生成執行計劃,就像沒使用繫結變數一樣,但是以後的執行計劃都是重用第一次的,

因此當data skew的時候,bind  peeking就會存在問題,因此bind peeking帶來的壞處

比好處多,11g引入自適應遊標共享來解決這個問題.

bind peeking控制引數_optim_peek_user_binds

3.column low/high values

列的最大值和最小值當收集統計資訊的時候設定method_opt=>for columns .. size 1

的時候收集,列的最大值用於評估範圍查詢情況的cost 和cardinality,當查詢的範圍超過

最大值或者最小值的時候容易導致cardinality為1,因此不準確的最大值和最小值容易

導致oracle選擇錯誤的執行計劃.

解決方法:

a.及時的收集統計資訊

b.手工調整最大值和最小值

c.使用動態取樣(對於超大表一般沒什麼作用)

4.data correlation

oracle在評估多列謂詞的時候,預設是按照謂詞獨立來評估的,比如(a=1 and b=2),在計算選擇

性的時候是按照(selectility(a)*selectility(b)),在11g以前oracle的統計資訊裡只會包含一個欄位

的資訊,無法識別組合列的資訊,因此存在列存在相關性的時候,oracle無法準確的評估cardinality的值,容易導致錯誤的執行計劃,解決方法:

a.hint

b.動態取樣level設定為4以上

c.11g收集組合列的統計資訊

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

相關文章