2011年2月1日 星期二

optimizer_dynamic_sampling參數的說明

optimizer_dynamic_sampling={0-10}
0=>disable
1=>當所有的tables都未有統計資訊,且滿足下列4個條件時,藉由抽樣其中32個區塊(block),取得table的統計資料
條件1.SQL敘述句中,至少有一個table沒有統計資料,且該table不是partitioned table.
條件2.該table(滿足條件1的table)與其他table結合(join)或位在子查詢內(subquery)或在不可合併的視觀表內(non-mergeable view).
條件3.該table(滿足條件2的table)沒有索引存在.
條件4.該table(滿足件3的table)的區塊數量大於32個
2=>SQL敘述句所使用的tables,至少有一個table沒有統計資料.但抽樣的資料區塊個數為64個e
3=>滿足optimizer_dynamic_sampling=2的所有條件,且SQL敘述句中有至少一個運算式(expression,例如where last_name='King').
此時將抽樣64個資料區塊當作分析統計的基準.
4=>滿足optimizer_dynamic_sampling=3的所有條件,且SQL敘述句中對同一個table使用多個述詞(predicate,例如where emp.last_name='King' and emp.salary>10000)
此時將抽樣32個資料區塊當作分析統計的基準.
5=>滿足optimizer_dynamic_sampling=4的要求,但抽樣的資料區塊數量為2倍的預設區塊數量(32),即使用64個區塊.
6=>滿足optimizer_dynamic_sampling=5的要求,但抽樣的資料區塊數量為4倍的預設區塊數量(32),即使用128個區塊.
7=>滿足optimizer_dynamic_sampling=6的要求,但抽樣的資料區塊數量為8倍的預設區塊數量(32),即使用256個區塊.
8=>滿足optimizer_dynamic_sampling=7的要求,但抽樣的資料區塊數量為32倍的預設區塊數量(32),即使用1024個區塊.
9=>滿足optimizer_dynamic_sampling=8的要求,但抽樣的資料區塊數量為128倍的預設區塊數量(32),即使用4096個區塊.
10=>對所有滿足optimizer_dynamic_sampling=9的tables,使用table所有的區塊進行分析.