oracle筆記整理14——效能調優之oracle執行計劃

thinkpadshi發表於2016-01-16

1) 優化器(optimizer)

a) RBO(rule-based optimizer)方式:基於規劃的優化方式
所遵循的是oracle內部預定的一些規則.

b) CBO(cost-based optimizer)方式:看語句的執行代價(cost),這裡的代價主要指cpu和記憶體。
優化器在判斷是否用這種方式時,主要參照的是表及索引的統計資訊。

2) 優化模式

a) rule:基於規則的方式

b) choose:預設使用方式,有統計資訊,採用CBO,無統計資訊,採用RBO.

c) first rows:有統計資訊,以最快的時間返回最先幾行,通常為NL連線方式。

d) all rows:即cost方式,有統計資訊,以最快的方式返回表的所有行,無統計資訊,才用RBO;

e) 更新統計資訊

表:  analyze table table_name compute statistics
索引:analyze index index_name estimate statistics

f) 有時候明明有索引但是執行計劃沒有走索引,原因有二,第一:表或索引的統計資訊缺失或過時;第二:表太小,oracle認為不值得走索引。

3) 執行計劃管理

優化器會維護所有執行次數超過一次的sql語句的每個執行計劃的歷史列表(plan history),優化器通過維護一個語句執行的日誌條目(statement log)來識別該sql是否為第二次執行。如果為第二次執行,則優化器將語句生成的所有執行計劃都插入到plan history表中,只有當新的執行計劃的成本比plan baseline 執行計劃基準線中的成本低時才使用。

4) sql plus中開啟執行計劃

a) SET AUTOTRACE ON          
–包含執行計劃、統計資訊、以及指令碼結果資料輸出

b) SET AUTOTRACE ON EXPLAIN       
–包含執行計劃、指令碼結果資料輸出,沒有統計資訊

c) SET AUTOTRACE TRACEONLY      
–有執行計劃、統計資訊,不會有指令碼結果資料輸出

d) SET AUTOTRACE OFF          
–不生成AUTOTRACE報告,這是預設模式

e) 注意:PL/SQL Dev工具的Command window中不支援set autotrance on的命令。在PL/SQL中可以按F5來檢視。

5) 示例

a)  set autotrace traceonly

這裡寫圖片描述

b) 統計資訊:
這裡寫圖片描述

c) 動態分析

Note
------------
-dynamic sampling used for the statement

這提示使用者CBO當前使用的技術, 當出現這個提示,說明當前表使用了動態取樣。說明這個表可能沒有分析統計資訊。

相關文章