Oracle 執行計劃 分析和動態取樣
--分析和動態取樣
1、如果表沒有做分析,那麼CBO可以通過動態取樣的分析來獲得資料,也可以獲得正確的執行計劃;
注意執行計劃中的提示,這表示使用了動態取樣
Note
----
- dynamic sampling used for this statement
2、如果表分析過,但是分析資訊過舊,這時候CBO就不會再使用動態取樣,而是使用這些舊的分析資料,從而可能導致錯誤的執行計劃。
做sql執行計劃的時候最好分析下資料(例如對t表)
IKKI@ test10g> exec dbms_stats.gather_table_stats(user,'t',cascade=>true);
PL/SQL procedure successfully completed.
是否對錶進行了分析,可以通過下面的語句查詢,如果結果為空,說明沒有對錶進行分析。
IKKI@ test10g> select num_rows, avg_row_len, blocks, last_analyzed
from user_tables
where table_name='T';
NUM_ROWS AVG_ROW_LEN BLOCKS LAST_ANALYZE
---------- ----------- ---------- ------------
是否對錶的索引進行了分析,可以用以下的語句查詢。
IKKI@ test10g> select blevel, leaf_blocks, distinct_keys, last_analyzed
from user_indexes
where table_name='T';
什麼時候使用動態取樣?
動態取樣需要額外的消耗資料庫資源,所以在這樣一個環境中:sql被反覆執行,變數被繫結,硬分析很少,是不宜用動態取樣的,就像 OLTP 系統。動態取樣發生在硬分析時,如果很少有硬分析發生,動態取樣的意義就不大。
而 OLAP 或資料倉儲環境下,sql的執行消耗的資源要遠遠大於sql解析,那麼讓解析再消耗多一點資源做一些動態取樣分析,從而做出一個最優的執行計劃是非常值得的。實際上在這樣的環境下,硬分析消耗的資源幾乎是可以忽略的。
建議,在 OLAP 或者資料倉儲環境中,將動態取樣的 level 設定為3 或4比較好;相反,在一個 OLTP 系統下,不應該使用動態取樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27633655/viewspace-1080696/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle動態取樣分析Oracle
- Oracle 分析及動態取樣Oracle
- 【原創】ORACLE 資料分析和動態取樣Oracle
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle 分析及動態取樣(轉帖)Oracle
- 怎樣看懂Oracle的執行計劃Oracle
- 【優化】ORACLE執行計劃分析優化Oracle
- 執行計劃-1:獲取執行計劃
- Oracle 索引和執行計劃Oracle索引
- Oracle 動態取樣Oracle
- Oracle獲取執行計劃的方法Oracle
- Oracle 獲取SQL執行計劃方法OracleSQL
- 怎樣看懂Oracle的執行計劃[轉]Oracle
- oracle dbms_xplan獲取執行計劃Oracle
- Oracle手動固定SQL執行計劃OracleSQL
- ORACLE執行計劃Oracle
- 【sql調優之執行計劃】獲取執行計劃SQL
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- Oracle 獲取執行計劃的幾種方法Oracle
- Oracle10g如何獲取執行計劃Oracle
- Oracle檢視正在執行的SQL以及執行計劃分析OracleSQL
- Oracle動態取樣學習Oracle
- explain執行計劃分析AI
- SQL執行計劃分析SQL
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 獲取SQL執行計劃SQL
- ORACLE關於執行計劃的簡要分析Oracle
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- 啟動執行計劃
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- Oracle如何手動重新整理執行計劃Oracle
- 檢視Oracle SQL執行計劃方法比較、分析OracleSQL
- 獲取執行計劃之Autotrace
- 獲取執行計劃的方法
- 獲取oracle sql語句詳細些執行計劃OracleSQL