当Oracle每一次新版本的发布,这一数据库就会变得更加的受关注,尤其是它的外部环境。Oracle在Oracle服务器上设置了很多基于CPU个数的重要的初始化参数,并且Oracle现在已经更加地意识到CPU运行循环周期和I/O操作的使用代价。
基于成本的SQL优化器(CBO)已经被提高到考虑外部的影响,尤其是当为一个SQL查询处理最佳执行的时候。因为数据库并非运行在一个不受其他因素影响的环境中,CBO将会成为影响每一次SQL操作的外部磁盘I/O代价和CPU运行周期代价的因素。这一重要的功能使得CBO成为全球多数成熟软件产品中的其中一个。CBO的工作就是为任何SQL操作选择一个最佳的执行计划。
根据Oracle文档,对于I/O和CPU的使用代价评价如下:
使用代价 = (#SRds * sreadtim + #MRds * mreadtim + #CPUCycles
--------------------------------------
cpuspeed )
--------------------------------------
sreadtim
这里:
#SRDs – 单块读入的数目
#MRDs – 多块读入的数目
#CPUCycles – CPU运行周期的数目
sreadtim - 单块读入的时间
mreadtim – 多块读入的时间
cpuspeed - 每一秒的CPU运行次数
请注意外部使用代价受到磁盘读定的估计使用代价以及与每一次内部操作相联系的估计CPU代价的影响。Oracle保存有关SQL处理的许多成分代价的详细信息,并使用这些平均的代价来影响基于成本的SQL优化器的选择。以下是一些范例:
* 杂乱信号连接的代价──Oracle知道一个杂乱连接所消耗的RAM内存的平均数量。
* 分类──Oracle为了执行分类和集中操作而保持跟踪RAM。
* 列表扫描代价──Oracle保存关于执行一个多块读入需要时间的信息。
* 索引块访问代价──Oraclet知道引出一个单一的块所需要的平均时间。
请注意这些使用代价的评价依据是不同的,这主要取决于你对Oracle优化器的选择。如果你具有一个带有first_rows优化器模式的OLTP系统,CBO就能够更快地返回行操作。另一方面,如果你使用的是数据仓库的first_rows优化器模式,CBO将会被这些外部因素严重影响,因为first_rows模式被设计以减少资源消耗。
