Oracle最佳化器CBO的知識點

來源:互聯網
上載者:User

ORACLE 提供了基於成本(CostBased)和基於規則(RuleBased)兩種最佳化器,簡稱為CBO和RBO,用於確定查詢操作的執行計畫。

一、如何使用CostBased最佳化器最佳化查詢操作?

如何使用CBO,那麼首先要理解這些概念

1、CBO的成本計算的依據

(1)統計資訊:與SQL語句所引用的對象相關以及主機的CPU和IO

(2)SQL語句本身

(3).環境:例如與最佳化器相關的參數設定

2、最佳化器目標:optimizer_mode

(1)ALL_ROWS

(2)FIRST_ROWS_N

3、選擇率和基數

4、聚簇因子

5、查詢轉換

(1)視圖合并(view merge)

(2)謂詞推進(Predicate Pushing)

(3)子查詢非嵌套化(Subquery Unnesting)

(4)OR條件展開

6、綁定變數與長條圖

7、收集統計資訊

二、為什麼CostBased最佳化器的執行計畫不是最好的?

CostBased最佳化器本身也是個智能軟體,肯定有陷缺,RBO(Rule-Based Optimizer)可以在某種程度上彌補CBO在效能上的缺陷。

三、為什麼CostBased的查詢有時候效能很好,有時候卻突然的變慢呢?

1、有可能是以下原因

(1)統計資訊不正確,這是關鍵所在

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

(2)與最佳化器相關的參數設定的不太合理,如下參數

optimizer_features_enable

optimizer_index_caching

optimizer_index_cost_adj

optimizer_mode

db_{keep_|recycle_|nk_}cache_size

db_block_size

db_file_multiblock_read_count

hash_area_size

memory_target

parallel_threads_per_cpu

pga_aggregate_target

sort_area_size

sga_target

(3)sql語句的編寫

例如一個複雜的sql有幾十張表相連,CBO就不一定能正確串連表的順序了,這時需要用Hint固定順序。。。

2、用以下方法改變執行計畫

(1)修改sql本身,如用Hints提示等

(2)穩固計劃

(3)使用sql概要(sqlprofile)

(4)改變統計資訊

(5)設定最佳化器模式相關的參數

(6)使用基準(baseline)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.