【CBO】基於成本優化器的基本原則(二)

yellowlee發表於2010-12-08

這一部分的內容比較實用,在sql調優中很重要的一個方面就是調整連線,而最重要的三種join方式的原理,以及代價計算和相關效能引數調整都有詳述。並且開始大量使用診斷事件,如10032,10104,10046,10053等,最後用了一整個章節來講述10053,重點分析了oracle對不同join order的評測。基本上CBO的基本內容就是這些了,再結合一些物件的internal分析,等待事件分析,和更為詳盡和多樣的分析工具,絕大多數由sql帶來的效能問題都可以得到解決。當然如果優化器使用RBO則令當別論,使用RBO其實比CBO的原理更為簡單,後續再述。

七,點陣圖索引

八,查詢轉換

1,四種常見的查詢轉換
  subquery
  view merging
  unnesting
  star transformation

2,filter原理

3,push_subq與no_unnest 的hint

4,ordered_predicates的使用

5,no_merge hint

6,with as語句

7,檢視合併

8,使用10053檢視合併或不合並檢視的join order資訊

9,謂詞推進,注意join謂詞在推進中的位置

10,子查詢
 相關隱含引數:
 _unnest_notexists_sq,_unnest_subquery等
 分類:
 a,關聯的,或者不關聯的
 b,簡單的,複雜的
 c,聚合
 d,單行
 e,in,exists (半連線)
 f,not in,not exists (反連線)
 g,null 的問題

11,ordered hint

12,星型轉換join


九,join cardinality
1,join的selectivity和cardinnality

2,join by range:
 a.join1 between b.join1 -n and b.join1 +n
 join not equal:
 a.join1 != b.join1
 
3,多表關聯的選擇性和card

 

十,nested loops
1,oltp系統中optimizer_index_caching的作用
  對nest loop join的影響

2,nl原理,outer和inner表的確定

3,使用use_nl hint

4,nl的cost計算


十一,hash join
1,hash join 原理
 hash join中的inner table用來構建hash cluster,inner table通常為小表

2,最優的(optimal)hash join

3,one pass hash join和multi pass hash join

4,調整hash_area_size來調整hash join

5,使用10104和10053事件追蹤和調整hash join

6,適合的hash_area_size與適合的hash partition。

7,調整pga_aggregate_target引數

8,9iCPU costing在enable與disable下的hash join的表現

9,多表關聯,hash join順序,ordered與swap_join_inputs 提示的使用


十二,sort and merge joins

1,排序操作的記憶體使用

2,sort_area_size和sort_area_retained_size引數

3,workarea_size_policy=auto,pga_aggregate_target引數,sort_multiblock_read_count引數

4,使用10046來觀察排序過程中的等待事件

5,排序的代價(io,cpu,space)計算(分析10053,10032)

6,merge join原理

7,cartesian merge join

8,一些sort的opration
 a,sort(order by )
 b,sort(unique)
 c,sort(group by)
 d,sort(aggregate)

9,集操作(set operations)


十三,使用10053


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-681289/,如需轉載,請註明出處,否則將追究法律責任。

相關文章