cost[转++]

在做sql分析时,执行计划的每一步都有cost值相对应,似乎是一个很重要的性能指标,我有几点不明白
1.cost是什么?
2.cost是怎么计算出来的?
3.一个sql语句是否cost越少越好?
4.评判一个sql的好坏是不是只要看它的cost,而不用考虑其他?
5.评判一个sql的好坏的指标,除了cost还有什么?
请各位大侠指教
谢谢!
---------------------------------------------------------------

cost是SQL语句执行所占的系统资源的多少,当然是COST越少越好。但也不尽相同,因为判断一个SQL语句的好坏,不光看所占资源的多少,更主要的是所用时间的多少,我认为,在现在这个信息的时代,时间就是金钱,因此提高运行速度也是必然的。
  所以我认为,除了COST以外,运行的速度还是非常关键的指标。
---------------------------------------------------------------

cost是一个估计值,它与使用该执行计划执行语句所需的资源期望使用量成比例。这些资源包括 (但不仅限于) I/O、CPU 时间和内存。但具体怎么算,我也不清楚,请知道的多指教,不过我觉得如果定期生成统计数字,基于成本的优化程序应是首选,因为我想使用系统资源少,耗费的时间也就短,当然运行的也就快,要不然oracle也不会推荐使用基于开销的优化程序了。
---------------------------------------------------------------

cost的计算方法(可能各个版本计算方法不同)
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

cost表示的是资源的消耗程度,而不代表运行速度。
就好像我们物理上的 功=功率X时间,功略一定,功率大,时间就短。
在我们常见的优化中first_row和all_row就是这个原理,是使用更多的资源还是获得更好的相应。
最新版本的数据库cost已经分为cpu_cost和io_cost两种。

posted on 2008-06-02 11:00  afant  阅读(351)  评论(0编辑  收藏  举报

导航