Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2834548
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2010-07-02 14:28:31

以前一直没有搞懂成本的单位是什么,看了<<基于成本的ORACLE优化规则>> 总算搞明白了。
摘自书中的一段文字以供参考:

According to the CPU costing model:

Cost = (

#SRds * sreadtim +

#MRds * mreadtim +

#CPUCycles / cpuspeed

) / sreadtim

where

#SRDs - number of single block reads

#MRDs - number of multi block reads

#CPUCycles - number of CPU Cycles

sreadtim - single block read time

mreadtim - multi block read time

cpuspeed - CPU cycles per second

转译过来,上述代码的含义为:

成本指的是花费在单块读取上的时间,加上花费在多块读取上的时间,再加上所需的CPU处理的时间,然后将总和除以单块读取所花费的时间。也就是说,成本是语句的预计执行时间的总和,以单块读取时间单元的形式来表示。

为什么Oracle会为成本计算选择这样一种古怪的时间单位,而不是简单地以厘秒(1/100秒)为单位进行计算?这纯粹是为了满足向后兼容性。在Oracle 8i(包括9i,如果不启用CPU成本计算)中,成本仅仅是对I/O请求数目进行计算,这种计算方式在单数据块和多数据块I/O之间并没有区别。因此,为了向后兼容,从Oracle 8i升级到Oracle 9i时,如果新的代码以单块读取时间为单位来报告时间,那么典型的(轻量级的,基于索引的)OLTP查询的成本所产生的数字并不会改变太多。

阅读(1124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~