Oralce中的成本评估机制解析
2009-05-18 13:15:12 来源:WEB开发网为此为了在最短时间内估计出给定查询的执行时间,CPU+IO成本模型下的查询优化程序会估算IO操作的数据和类型,并且在查询执行过程中数据库可能执行的CPU周期数。然后利用系统统计数据将这些CPU周期数和IO操作转换为SQL执行计划时间。然后根据选择一个执行计划时间最短的执行计划来对数据库进行操作。可见在CPU+IO模型中,其只考虑CPU周期数与IO操作这两个因素。不过对于大部分数据库应用来说,这已经足够了。
从这个成本模型中,也给我们提高数据库性能做了一些暗示。CPU周期数的话我们很难改善,除非采用性能更好的CPU,但是这需要花费比较大的代价。但是改善IO操作的话,还是有比较多的方法。同可以通过磁盘阵列技术,让系统同时向多块硬盘中存取数据以缩短IO操作的时间,这倒是可行的。虽然Oracle数据库的成本模型是其内部操作的,但是深入研究其成本统计的方法,对我们通过改善硬件配置来提高数据库性能也是很有帮助的。
二、CPU+IO成本模型可以重新排序谓词。
在Oracle数据库中,成本模型有很多,为什么其大力推荐CPU+IO成本统计模型呢?这其中很重要的原因就是因为采用CPU+IO的话,数据库在查询时可以采用重新排序谓词。笔者在文章一开头就谈到过,可以通过视图合并、谓词下推等等来减少扫描、连接或者聚合作业,来提高SQL语句的执行性能。而重新排序为此是其提高SQL语句执行性能的一个重要举措。这个措施只有在CPU+IO成本模型下才能够实现。因为重排序谓词只有在每个谓词成本都可以估算的情况下才可以进行;而只有在CPU+IO 成本模型下才会对每个谓词进行成本估算,其他的成本统计模型都不会。所以采用这个成本模型的话,那么最终优化的执行计划效果会比较明显。根据一些官方的资料,采用CPU+IO成本模型,比采用其他成本模型,如IO成本模型,会把执行计划的时间缩到70%。这是一个很可观的性能改善数字。为此对于一些性能要求比较高的数据库,可以考虑把成本模型设置为CPU+IO。但是要注意天下没有免费的午餐。由于在CPU+IO成本模型中,需要估算每个谓词的成本,需要考虑CPU的周期数与IO操作的数量与类型,这会增加数据库服务器一些额外的开销。可见也并不是在任何情况下都适合采用CPU+IO成本统计模型。如在一些比较小的数据库中采用这种成本模型的话,反而起到的效果不会很明显。
更多精彩
赞助商链接