【CBO】基於成本優化器的基本原則(一)
基於成本的一些規則或者計演算法則,對於理解cost計算和優化器最終的執行計劃選擇有很大幫助。參考《cost based fundamental》,僅僅列出一些涉及到的內容或者title,可以看出作者在優化器的內部原理和實際體現方面都非常有心得。內容的編排看似有些散亂,不過優化的複雜性決定了此型別的講解必然是一個即有深度有要廣泛的模式。可以對各個不同情況進行測試,真實環境中雖然是各種情況的一個彙集,不過只要理解了原理,也就沒有什麼實質性障礙了。
一,表掃描
1,計算單表掃描的cost
a,不同的db_file_multiblock_count對計算cost的影響
b,表的統計資訊中的numblks塊數的改變對計算cost的影響
c,不同的block_size對cost的影響
d,高水位
2,使用cpu開銷模式
a,收集和設定系統統計資訊
b,有系統統計資訊的情況下,cost的計算公式
c,cpu開銷模式的開關和cpu開銷下謂詞順序對cost的影響
3,並行執行
a,使用並行執行的hint
b,不同並行度在不同版本下面單表掃描的cost表現
c,並行掃描和直接路徑讀
4,索引快速全掃描
a,索引塊全掃描的cost計算模型與全表掃描類似
b,改變索引的leaf_blocks數量對計算cost的影響
c,使用hint利用index_ffs
5,分割槽
a,分割槽內掃描與跨分割槽掃描
b,執行計劃分析
c,過度使用繫結變數
二,單表選擇性
1,列統計資訊density與num_distinct
2,base選擇性係數,base集勢係數計算
3,in-list
a,in會轉化為or,如果使用use_conact,則會轉化為union all
b,in list在不同版本中的cardinality變化
4,範圍謂詞
a,謂詞對cost計算的影響,上下界,包含或不包含的各種情況測試
b,錯誤或者改變的cardinality,能夠對join order和索引的選擇產生很大影響。
c,繫結變數和範圍
d,範圍謂詞的選擇性計算
e,繫結變數peeking
三,簡單b樹訪問
1,典型的b樹訪問步驟
2,索引訪問的代價計算方法
3,索引高度,葉塊數
4,索引的pctfree
5,索引選擇性
6,索引因子
7,擴充套件
a,range
b,組合索引
c,in-list
d,索引全掃描
e,只訪問索引
8,cpu costing
四,clustering factor
1,索引因子對cost計算的一般測試
2,減少表競爭(使用多個freelist)
a,rowid結構
b,storage引數(freelists)
c,freelists管理
3,減少leafblock競爭(使用反向鍵索引)
4,減少表競爭(使用ASSM)
5,減少rac中的競爭(使用freelist groups)
a,buffer busy waits
b,重新平衡freelist groups
6,索引的欄位順序
a,不同順序的cluster factor不同
b,增加欄位對cf的影響
7,獲得正確的統計資訊
a,dbms_stats.get_index_stats和set_index_stats
五,選擇性問題
1,不同資料型別的選擇性
a,date
b,character
c,date,number,character三者的選擇性比較
d,直方圖可以幫助糾正一些由於資料型別導致的選擇性計算不準確的問題
e,對於範圍謂詞,使用between and 和 不等號對card值的影響
f,sysdate問題
between sysdate and sysdate + n
between trunc(sysdate) and trunc(sysdate) + n
between sysdate - n and sysdate
between trunc(sysdate) -n and sysdate
between sysdate - n and sysdate +n
between trunc(sysdate) - n and trunc(sysdate) + n
以及上下限分別使用或者不使用繫結變數給card值計算帶來的影響
g,函式選擇性
h,關聯的列
i,動態取樣,不同版本,不同取樣級別對card計算的影響
六,直方圖
a,高度直方圖
b,頻度直方圖
c,直方圖與繫結變數
d,繫結變數窺探
e,oracle何時忽略直方圖
f,直方圖與分散式查詢
g,篡改頻度直方圖
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-680288/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark SQL 效能優化再進一步 CBO 基於代價的優化SparkSQL優化
- 基於成本的優化器 — 一般錯誤概念和問題(轉)優化
- 袋鼠雲數棧基於CBO在Spark SQL優化上的探索SparkSQL優化
- 基於正則化的多工聯邦
- 前端基於瀏覽器儲存的AJAX效能優化前端瀏覽器優化
- 測量、基線和效能優化之三:基於測量、基線和變化的效能優化優化
- mysql優化篇(基於索引)MySql優化索引
- 基於 PageSpeed 的效能優化實踐優化
- 測量、基線和效能優化之三:基於測量、基線和變化的效能優化v優化
- 基於 XAF Blazor 的規則引擎編輯器Blazor
- 基於機器學習預測Airbnb的城市旅行成本機器學習AI
- 對一條基於分割槽的簡單SQL的優化SQL優化
- TiDB 原始碼閱讀系列文章(二十一)基於規則的優化 IITiDB原始碼優化
- SQL優化器-RBO與CBO分別是什麼SQL優化
- Curve 基於 Raft 的寫時延優化Raft優化
- 基於XDanmuku的Android效能優化實戰Android優化
- Sentinel規則基於Apollo(阿波羅)持久化持久化
- 機器學習基礎——規則化(Regularization)機器學習
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- 並查集系列之「基於size的優化」並查集優化
- 並查集系列之「基於rank的優化」並查集優化
- 基於Java語言構建區塊鏈(一)—— 基本原型Java區塊鏈原型
- Hive使用Calcite CBO優化流程及SQL優化實戰Hive優化SQL
- Spark效能調優——9項基本原則Spark
- 基於RecordRTC的安卓端上傳錄影優化安卓優化
- 基於 XAF Blazor 的規則引擎編輯器 - 實戰篇Blazor
- 基於bat指令碼的前端釋出流程的優化BAT指令碼前端優化
- 基於準則匹配的影像對準
- 【Oracle】Oracle wrong result一則(優化器問題)Oracle優化
- 優化基於FPGA的深度卷積神經網路的加速器設計優化FPGA卷積神經網路
- 基於CPU的深度學習推理部署優化實踐深度學習優化
- 基於Vue的SPA如何優化頁面載入速度Vue優化
- 基於圖的機器演算法 (一)演算法
- AutoTiKV:基於機器學習的資料庫調優機器學習資料庫
- Oracle效能優化方法論的發展之二:基於OWI的效能優化方法論Oracle優化
- Oracle效能優化方法論的發展之一:基於區域性命中率分析的效能優化方法Oracle優化
- 基於邏輯規則的圖譜推理
- SOLIDWORKS建立引數化模型基本原則Solid模型
- 騰訊廣告模型基於"太極"的訓練成本最佳化實踐模型