您的位置:首页 > 数据库

执行计划之误区,为什么COST很小,SQL却跑得很慢?

2014-11-05 14:15 447 查看

执行计划之误区,为什么COST很小,SQL却跑得很慢?

分类:
Oracle Training 2014-07-31 18:07
480人阅读 评论(0)
收藏
举报

oracle

转载请注明出处:/article/1630110.html

2014.7.31就晚20:30 My Oracle Support组猫大师在线分享

《执行计划之误区,为什么COST很小,SQL却跑得很慢?》

如需了解更多请登录网站http://www.jianfengedu.com/Discuz/detail/id/58



+++我给你看个东西。

--------------------------------------------------------------------------

| 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 val<low_value and value>2*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

国内顶级SQL优化课程

8月5号启动QTune系列I CBO内部算法--老猫

http://item.taobao.com/item.htm?spm=a1z10.1.w4004-6565782199.6.1TCjTi&id=40189797849

DSI之系列I CBO内部算法

--2014.8.5启动(14课时,7天课)

¥499/每人

选择率,基数计算公式

-------------------------

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

重磅推出后继课程

QTune系统II   transformaction.

QTune系统III   qtune案例实战

QTune系统IV   各种丰富的调优工具

不要4999,只要¥499

边学边送,还赠送多年的心血SQ优化资料!!!

———————————————尖峰最近线上沙龙分享活动录制的视频

caibird2005分享主题《数据仓库环境的表拆分、分区表、并行计算 》

链接: http://pan.baidu.com/s/1eVA14

Clojure大师分享主题《rac study from scratch 》

链接: http://pan.baidu.com/s/16FRIm

Jack分享主题《存储的前世今生和未来----存储的若干关键技术和虚拟化》

链接: http://pan.baidu.com/s/1eQrECQe

Dasight博士分享主题《大数据时代的技术发展和对IT人的挑战》

链接: http://pan.baidu.com/s/1bnenDtd

链接: http://pan.baidu.com/s/1sj0fJ5r

guoyJoe分享主题《BBED汇报演出 : UPDATE恢复揭密》

链接: http://pan.baidu.com/s/1i3mlPC5

Dasight博士分享主题《漫谈大数据》

链接: http://pan.baidu.com/s/1mgLrAuG

链接: http://pan.baidu.com/s/1c0hCsSS

杜兴分享主题《MySQL 5.6版本特性介绍及如何从MySQL 5.5向MySQL 5.6》

链接: http://pan.baidu.com/s/1eQ5oQp8

东大博士Dasight分享主题《Hadoop与Nosql技术的适用性分析》

链接: http://pan.baidu.com/s/1mg9g3Za

猫大师在线分享《通过一个案例彻底读懂10046 trace--字节级深入破解》

链接: http://pan.baidu.com/s/1pJsfFWv

链接: http://pan.baidu.com/s/1GmLqu

加入VIP即可免费获得以上分享视频,以及今后的分享都会给出,只要10元会员费,如下链接

http://item.taobao.com/item.htm?spm=a1z10.1.w4004-6565782199.2.ul78Pt&id=38629931035

【尖峰线上沙龙技术分享QQ交流群】 252296815

【尖峰线上沙龙技术YY频道】10799487

创造良好的Oracle技术氛围,精心分享各种Oracle学习资源,广集圈内好友,

定期开展公益YY课堂深入学习以及适当线下交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: