CBO優化器實用理解

對於CBO的理解:
RBO-----基於規則的優化器
CBO-----基於代價的優化器
CBO計算執行計劃的代價(cost),並從中選擇cost最低的執行方案,它依賴數據庫對象的統計信息,統計信息的及時性和準確性都會影響CBO做出最優的決策,由於RBO死板的認定規則,對數據不敏感,規則是死的,數據是活的,並且數據具備變化性和時效性,因此RBO生成的執行計劃是不許確的,不是最優的。CBO選擇的執行計劃是創建在統計信息的基礎上,統計信息的及時性和準確性影響着CBO做出最優決策。
 
CBO優化器根據SQL語句生成一組可能被使用的執行計劃,估算出每一個執行計劃的代價,並調用計劃生成器(Plan Generator)生成執行計劃,比較執行計劃的代價,最終選擇一個代價最小的執行計劃。查詢優化器有查詢轉換器(Query Transformer),代價估算器(Estimator)和計劃生成器(Plan Generator)組成。
 
CBO優化器的組件:
1.查詢轉化器(Query Transformer):
    查詢轉換器的做用就是等價改變查詢語句的形式,以便產生更好的執行計劃,它決定是否從新用戶的查詢(包括視圖合併、謂詞推動、非嵌套子查詢/子查詢反嵌套、物化視圖重寫),以便生產更好的查詢計劃。
2.代價評估器(Estimator)
    評估器經過複雜的算法結合來統計信息的三個值來評估各個執行計劃的成本:選擇性(Selectivity)、基數(Cardinality)、成本(Cost)。
3.計劃生成器(Plan Generator)
    計劃生成器就是生成大量的執行計劃,而後選擇其整體代價或者整體成本最低的一個執行計劃。
  流程圖:
     
 
對於analyze的我的理解:
analyze執行後,生成的統計信息在user_table裏面,select * from user_tables where table_name=""
收集統計信息的目的是爲了讓CBO的執行計劃更加準確
在analyze以前,user_table內不少字段都是空值,收集統計信息後,就開始有數據了,這些數據就是經過分析表獲得的,而在收集完統計信息後,執行計劃就可能發生變化。
 
analyze能夠指定分析:表,字段,索引。若是不指定就是默認所有都分析
①---SQL> analyze table fsd.cl_loan_acct_hist compute statistics ;
②---SQL> analyze table fsd.cl_loan_acct_hist compute statistics for table for all indexes for all columns;
                                                                                                              表                索引                  字段列
③---SQL> analyze table fsd.cl_loan_acct_hist compute statistics for table for all indexes for all indexes columns;
其中①是默認狀況,等價於②
 
統計信息的生成能夠有徹底計算法和抽樣估算法,SQL例句以下:
徹底計算法:analyze table abc compute statistics;
抽樣估算法(20%):analyze table abc estimate statistics sample 20 percent;
對錶做徹底計算所花的時間至關於作全表掃描,抽樣估算法因爲採用抽樣,比徹底計算法的生產統計速度要快。
 (下一個隨筆會對統計信息作詳細分析)
由於CBO是按照執行計劃的代價(cost)來擇優選擇運行方案,因此要讓CBO合理利用數據的統計信息,使用analyze或者 dbms_stats從新生成統計信息。
相關文章
相關標籤/搜索