讀書筆記-《基於Oracle的SQL優化》-第一章-2
CBO優化器的基本概念:
可傳遞性:
1、簡單謂詞傳遞
t1.c1=t2.c1 and t1.c1=10,Oracle會自動將t2.c1=10的條件新增。
2、連線謂詞傳遞
t1.c1=t2.c1 and t2.c1=t3.c1,Oracle會自動將t1.c1=t3.c1的條件新增。
3、外連線謂詞傳遞
t1.c1=t2.c1(+) and t1.c1=10,Oracle會自動將t2.c1(+)=10的條件新增。
CBO的侷限性:
1、CBO會預設目標SQL語句where條件中出現的各個列之間是獨立的,沒有關聯關係。
2、CBO會假設所有的目標SQL都是單獨執行的,並且互不干擾。
不考慮SQL執行已經快取到Buffer Cache,下次執行不需要訪問物理IO到磁碟讀索引葉子塊、資料塊等,高估用索引的成本。
3、CBO對直方圖統計資訊有諸多限制。
Oracle 12c之前,Frequency型別的直方圖對應的Bucket數量不能超過254,如果目標列的distinct值的數量超過254,Oracle就會使用Height Balanced型別的直方圖。對於Height Balanced型別的直方圖,因為Oracle不會記錄所有的nopopular value的值,所以CBO選錯執行計劃的概率會比Frequency型別的情形高。
如果針對文字型別的欄位收集直方圖統計資訊,則Oracle只會將該文字型別欄位的文字值頭32個位元組取出來(實際只取頭15個位元組),並將其轉換成一個浮點數,然後將這個浮點數作為上述文字型欄位的直方圖統計資訊儲存於資料字典中。對於那些超過32個位元組的文字型欄位,只要對應記錄的文字值的頭32個位元組相同,Oracle收集直方圖統計資訊時,就會認為這些記錄文字值相同,但實際是不同的。進而選擇錯誤的執行計劃。
4、CBO在解析多表關聯的目標SQL時,可能會漏選正確的執行計劃。
SQL各表之間可能的連線順序總數是n!,10個表連線三百多萬,15個表連線一百多億。
CBO至多隻會考慮其中根據_OPTIMIZER_MAX_PERMUTATIONS計算出來的有限種可能。
只要目標SQL正確的執行計劃不在上述有限可能之中,則CBO一定會漏選正確的執行計劃。
SELECT i.ksppinm name, CV.ksppstvl VALUE, CV.ksppstdf isdefault,
DECODE (BITAND (CV.ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismodified,
DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx
AND i.ksppinm LIKE '%_optimizer_max_%'
AND i.ksppinm LIKE '/_%' ESCAPE '/' ORDER BY REPLACE (i.ksppinm, '_', '');
DECODE (BITAND (CV.ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismodified,
DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx
AND i.ksppinm LIKE '%_optimizer_max_%'
AND i.ksppinm LIKE '/_%' ESCAPE '/' ORDER BY REPLACE (i.ksppinm, '_', '');
NAME
---------------
_optimizer_max_permutations
---------------
_optimizer_max_permutations
DESCRIPTION
---------------
optimizer maximum join permutations per query block
VALUE ISDEFAULT ISMODIFIED ISADJ
--------------- --------- ---------- -----
2000 TRUE FALSE FALSE
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-1061804/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讀書筆記-《基於Oracle的SQL優化》-第一章-3筆記OracleSQL優化
- 讀書筆記-《基於Oracle的SQL優化》-第二章-1筆記OracleSQL優化
- 學習筆記-《基於Oracle的SQL優化》-第一章-1筆記OracleSQL優化
- 讀書筆記2-記憶體優化篇筆記記憶體優化
- Oracle Sql優化筆記OracleSQL優化筆記
- 《HTTP/2 基礎教程》 讀書筆記HTTP筆記
- 讀書筆記2筆記
- 讀書筆記3-卡頓優化篇筆記優化
- <轉>oracle效能調整讀書筆記(2)Oracle筆記
- SQL優化筆記SQL優化筆記
- 高效能MySQL讀書筆記---索引優化MySql筆記索引優化
- FPGA讀書筆記2FPGA筆記
- 好書推薦—《基於Oracle的SQL最佳化》OracleSQL
- oracle 學習筆記---效能優化(2)Oracle筆記優化
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- 【前端效能優化】高效能JavaScript讀書筆記前端優化JavaScript筆記
- Effective Java 讀書筆記(2)Java筆記
- 讀書筆記【2】 初探Storyboard筆記
- 讀書筆記(2)《微精通》筆記
- 《禪者的初心》讀書筆記(2)筆記
- Selenium2自動化測試實戰基於Python語言》讀書筆記--第2章Python筆記
- C++ Primer 讀書筆記 - 第一章C++筆記
- 無約束優化方法讀書筆記—入門篇優化筆記
- 資料庫索引設計與優化讀書筆記--《三》SQL處理過程資料庫索引優化筆記SQL
- 《SQL必知必會》讀書筆記SQL筆記
- SQL優化筆記 [final]SQL優化筆記
- The art of multipropcessor programming 讀書筆記-硬體基礎2筆記
- 【筆記】oracle 優化器筆記Oracle優化
- ORACLE效能優化筆記Oracle優化筆記
- 我的《機器學習實戰》讀書筆記(2)機器學習筆記
- 轉載大師的讀書筆記 2筆記
- 《effective java》讀書筆記2(對於所有物件都通用的方法)Java筆記物件
- 【讀書筆記】異化勞動筆記
- 效能之巔讀書筆記--第一章緒論筆記
- 基於Oracle的SQL最佳化OracleSQL
- 《Selenium2自動化測試實戰基於Python語言》讀書筆記--第3章Python筆記
- 【書評:Oracle查詢優化改寫】第一章Oracle優化
- 慢SQL優化實戰筆記SQL優化筆記