oracle動態取樣_optimizer_dynamic_sampling(二)

wisdomone1發表於2012-12-23
oracle 動態取樣
 1,動態取樣就是為了提升資料庫的效能,透過對錶和其索引的謂詞選擇度和統計收集更加精確的資訊.
 2,上述的表及索引的統計包括:表的資料塊數,索引資料塊數,表的基數,關聯列的統計.
 3,上述這些資訊越準越會產生更好的執行計劃
 
oracle動態取樣可以作什麼?
 1,當被收集的統計不能用或可錯大的錯誤,就用它評估單表的謂詞選擇度,
 2,如表及索引無統計,評估表的統計
 3,一些及索引的統計過期不用使用,就用動態取樣
 
 
oracle動態取樣如何工作呢?
 1,最主要的效能問題在編譯期間.oracle在編譯期間決定動態取樣是否有益有於查詢.
   如有益查詢,則會發出一個遞迴sql掃描表的隨機資料塊個數,然後透過單表的謂詞
   評估謂詞的選譯度.
 2,在一些情況下,取樣的基數用於評估表的基數.而且相關的表和列的統計也會收集
 
 何時使用動態取樣呢?
  1,透過動態取樣可以得到更好的執行計劃
  2,整個取樣的時間僅佔查詢執行總時間的很小一部分
  3,查詢會多次執行
  4,如下引數optimizer_features_enable如配置為9.2.0則禁用動態取樣,測試如下
 
SQL> show parameter optimizer_features_enable
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
optimizer_features_enable            string      11.2.0.1
SQL> explain plan for select a from t_sample;
已解釋。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 2027750767
--------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          |  2435K|    30M|   548   (3)| 00:00:
|   1 |  TABLE ACCESS FULL| T_SAMPLE |  2435K|    30M|   548   (3)| 00:00:
--------------------------------------------------------------------------
Note
-----
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
   - dynamic sampling used for this statement (level=2)
已選擇12行。
SQL> show parameter optimizer_features_enable
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
optimizer_features_enable            string      11.2.0.1
SQL> alter session set optimizer_features_enable='9.2.0';
會話已更改。
SQL> explain plan for select a from t_sample;
已解釋。
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 2027750767
--------------------------------------
| Id  | Operation         | Name     |
--------------------------------------
|   0 | SELECT STATEMENT  |          |
|   1 |  TABLE ACCESS FULL| T_SAMPLE |
--------------------------------------
Note
-----
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
   - rule based optimizer used (consider using cbo)
已選擇12行。
SQL>  

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

相關文章