算数据存储大小一直是大型数据库的要害技术。假如一个数据库占用成千上万的字节,那么在RAM中计算整个数据库会变得不切实际。所以Oracle开发人员必须找到一种计算数据库存储大小的方法,从而可以缩小RAM资源中浪费的空间,这就意味着为公司的RAM开支节省了很多的费用。
Oracle9i 提供了一种新的特性,即v$db_cache_advice,这一特性可以猜测数据缓冲存储器中附加数据存储的大小。基于这一特性,Oracle DBAs能够精确地猜测RAM数据存储的最佳大小。让我们用一些范例来说明这些功能。
如何实现这些功能?
当数据存储容量比较小时,随着RAM数据容量的减小,磁盘I/O会剧急减小。如下图所示。
图:当RAM数据容量上升时,磁盘I/O随之减少
然而,磁盘I/O的剧急减少也不是趋于无限小。当RAM大小达到整个数据库的占有空间时,磁盘I/O中多余部分的减少会变得很小(如下载所示),因为此时数据库已经没有可以访问的数据。
图:多余RAM数据空间的下降趋势
作为一种通用的规则,系统中可利用资源部分都可以调整,RAM资源可以改变到一定的大小以减少一些多余的空间(如下图)。这完全可以让Oracle DBA找到最佳的数据库容量大小。
图:RAM数据容量的最佳大小
新推出的DB特性与Oracle 7中的相应特性非常相似,这一特性使用名为x$kcbrbh的方法来跟踪数据的容量。
与Oracle 7模型类似,你必须预先为数据存放容量分配RAM空间。通过设置init.ora参数,并把db_cache_advice设置为on 或ready,就可以实现以上过程。使用alter system命令还可以动态地更改这些参数,所以当数据库运行时,DBA便具备猜测功能。
既然你必须为db_cache_size预先分配额外的RAM数据容量,利用这一功能就可以确定数据容量的最佳大小。
一旦db_cache_advice函数被调用,而且数据库运行一段时间,Listing A 中的查询就会执行猜测功能。
列表A中的结果在Listing B中显示。注重数据的范围是从当前容量大小的百分之十到当前容量大小的两倍。
这里你可以看出,总共的磁盘I/O没有最大值,这也就是典型的大型数据库特性。因此,也不存在db_cache_size参数的最佳设置。当db_cache_size值越大,磁盘I/O会变得越小。
在db_cache_size中添加块的方法是很简单:只要内存容量答应,你可以增大db_cache_size的值。缓冲块的增加也会导致RAM内存容量的增加。通常情况下,一个数据库治理系统不会占用一台机器的全部内存。所以,DBA应该慎重地猜测可使用的内存大小并决定缓冲块的最佳选择。
一句警告:当DBA设置dba_cache_advice=on,Oracle会从共享的RAM区域“偷用”空间,这样会导致一些不可意料的破坏。例如,现成的db_cache_size设置为500MB,Orcale会从共享区域内“偷取”一定的RAM空间。为了避免这些问题,DBA应该在init.ora文件中设置db_cache_advice=ready。当这些完成后,Oracle会在数据库的启动时间预先分配RAM容量大小。
对于更高版本的Oracle9i数据库,你不仅可以控制缓冲块的数量,而且还可以控制每个数据缓冲块的大小。
总结
随着Oracle9i灵活性的不断增加和功能上的不断完善,对于数据库治理人员而言,确定SGA区域最佳容量大小是一个新的难题。把这一工作处理得当,便意味着在RAM资源上节省大量的资金。