先到者为君,后到者为臣!作为技术屌丝的你,肯定有过很多感慨,不要总是步人后尘,请加入我们的Hadoop先行者行列,让我们一起走在大数据时代的前列。

尖峰在线培训 QTune系列I CBO内部算法

国内首创成就QTune的顶级高手之课 --》我保证,认真听完,并理解了我的课,一步一步成为QTune高手并且是一流高手!!! QTune系列I    CBO内部算法 QTune系统II   transformaction. QTune系统III   qtune案例实战 QTune系统IV   各种丰富的调优工具 --》能从头听到尾, 真的能成QTune高手 我只提一个问题, 有谁能把> 的选择率真的搞清楚? DIS上都没有讲清楚。 这些东西谁都没讲明白, 连oracle COE都说不清楚。 如果有空, 我还想,针对开发人员讲一讲,SQL写法。 不夸张地说, 一个select没有四个小时讲不完的。

QTune系列I CBO内部算法

国内首创成就QTune的顶级高手之课
    --》我保证,认真听完,并理解了我的课,一步一步成为QTune高手并且是一流高手!!!

QTune系列I    CBO内部算法
QTune系统II   transformaction.
QTune系统III   qtune案例实战
QTune系统IV   各种丰富的调优工具

    --》能从头听到尾, 真的能成QTune高手

  我只提一个问题, 有谁能把> 的选择率真的搞清楚? DIS上都没有讲清楚。
  这些东西谁都没讲明白, 连oracle COE都说不清楚。

  如果有空, 我还想,针对开发人员讲一讲,SQL写法。 不夸张地说, 一个select没有四个小时讲不完的。


选择率,基数计算公式
-------------------------
1. 单表无直方图
1.1 (col = val)在range内
1.2. (> < <= >= between, 在range内
1.3. out-of range

2. 单表有frequency直方图
2.1 (col = val)在range内
2.2. (> < <= >= between, 在range内
2.3. out-of range

3. 单表有hight balanced直方图
2.1 (col = val)在range内
2.2. (> < <= >= between, 在range内
2.3. out-of range

4. Join选择率计算


成本计算公式:

1. 重要的概念
-----------------
1.1 
1.2 Cost计算模型.
1.3 Cost单位.
1.4 单块读的次数(#SRds)
1.5 多块读的次数(#MRds)
1.6 系统统计信息
1.7 Join Selectivity & Cardinality

2. 单表访问(没有直方图)
------------------
2.1 Cost Model Components
2.2 全表扫描的成本计算
2.3 表的Cardinality和selectivity

3. Index扫描
------------------
3.1 公式:
3.2 通过B*Tree index扫描表

Join
---------
4. Nested Loop

5. Hash Join and Sort Merge Join



+++我给你看个东西。


--------------------------------------------------------------------------
| Id  | Operation  | Name | Rows  | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  | |     1 |    10 |   349   (1)| 00:00:05 |
|*  1 |  TABLE ACCESS FULL| T1 |     1 |    10 |   349   (1)| 00:00:05 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("OBJECT_NAME"='00440')

table name:T1
column name:OBJECT_NAME
num_rows:87417
num distinct:48128
num_nulls:797
density:.0000115446779034865
histogram:HEIGHT BALANCED
high_value:4435(D5) -- internal value:354151154089362000000000000000000000
low_value:3030343432(00442) -- internal value:250207940888765000000000000000000000

00400 internal Value : 250207940886347000000000000000000000

ENDPOINT_VALUE     ENDPOINT_NUMBER BUCKET_COUNT
-------------------- --------------- ------------
46641  40 1
47796  41 1
A1  49 8
B2  58 9
C3  66 8
D5  75 9



Density = (Bucket_total - Buckets_all_popular_value)/
Bucket_total/(NDV - popular_values.COUNT)
 =(75 - 34)/75/(48128 - 4) = .00001136

Sel = .00001136 * (87417 - 797)/87417 * (1 - ((250207940888765000000000000000000000 - 250207940886347000000000000000000000)/(354151154089362000000000000000000000 - 250207940888765000000000000000000000)))
= .000011256
Card = 87417 * .000011256 = .983965752

这是:col=val and val2*low_value - high_value
类似这样的条件的算法。

high_value:4435(D5) -- internal value:354151154089362000000000000000000000
low_value:3030343432(00442) -- internal value:250207940888765000000000000000000000

00400 internal Value : 250207940886347000000000000000000000

这三个数字是怎么得出来的?

D5在dba_tab_columns里,存成这样的:4435, 其实oracle内部计算用的值是:354151154089362000000000000000000000


 Density * A4Nulls * (1 - ((val - low_value)/(high_value - low_value)))这是公式, 有这个公式,是没有用的。你不会用。

与其实, 他在告诉你怎么COST,不如说,他是想告诉你, 怎么研究oracle的算法。

其实就是告诉你, 怎么猜。 里面也有错的。

比如cardinality他都是用ceil()一下, 其实,oracle多数情况下用round

2014-08-05 11:12:32
Copyright © JianFengEdu.com 2013. All Rights Reserved . 尖峰在线培训 版权所有 . 浙ICP备14005612号-1  
  • QQ咨询

  • 点击这里给我发消息 陈老师
  • 点击这里给我发消息 郭老师
  • DBA基础学习群

    尖峰OracleDBA基础学习群
  • 电话咨询

  • 13735456161