Oracle 9i引入了一个新的途径来预测数据缓冲cache中附加数据缓存的所带来的好处的多少。V$DB_CACHE_ADVICE显示了20个可能的缓冲cache大小的“脱靶”率(范围从当前大小的10%到200%)。
由于Oracle 9i中你需要维护五个分开的数据缓冲cache,因此这个特性非常重要。这些数据缓冲包括:
DEFAULT池
KEEP池
RECYCLE池
2K数据缓冲
4K数据缓冲
8K数据缓冲
16K数据缓冲
32K数据缓冲
警告:当你把DBA_CACHE_ADVICE设置为ON时,Oracle会从共享的池中“窃取”RAM页面,这往往严重影响到了库cache。例如,如果设置DB_CACHE_SIZE为500m,Oracle就会从共享池中窃取相当多数量的RAM空间。
为了避免这个问题,我们应该在INIT.ORA文件中把DBA设置为DB_CACHE_ADVICE=READY。这样,Oracle会在数据库启动时预分配RAM内存。
为了演示cache建议是如何工作的,让我们看看STATSPACK报告来看看在哪些时间数据缓冲命中率低于90%。
***********************************************************
当数据缓冲命中率低于90%时,你就应该
考虑增加DB_CACHE_SIZE参数了。
***********************************************************
yr. mody Hr. Name bhr
------------- -------- -----
2001-01-27 09 DEFAULT 45
2001-01-28 09 RECYCLE 41
2001-01-29 10 DEFAULT 36
2001-01-30 09 DEFAULT 28
2001-02-02 10 DEFAULT 83
根据上面的输出信息,我们可以在每天上午8点到9点之间增加DB_CACHE_SIZE,从PGA_AGGREGATE_TARGET中窃取RAM空间。
下面我们看看利用了DB_CACHE_ADVICE之后的输出。下表给出了增加了新的数据缓冲后对磁盘I/O减少的估计值的全部信息。
Estd Phys Estd Phys
Cache Size (MB) Buffers Read Factor Reads
---------------- ------------ ----------- ------------
30 3,802 18.70 192,317,943 10% size
60 7,604 12.83 131,949,536
91 11,406 7.38 75,865,861
121 15,208 4.97 51,111,658
152 19,010 3.64 37,460,786
182 22,812 2.50 25,668,196
212 26,614 1.74 17,850,847
243 30,416 1.33 13,720,149
273 34,218 1.13 11,583,180
304 38,020 1.00 10,282,475 Current Size
334 41,822 .93 9,515,878
364 45,624 .87 8,909,026
395 49,426 .83 8,495,039
424 53,228 .79 8,116,496
456 57,030 .76 7,824,764
486 60,832 .74 7,563,180
517 64,634 .71 7,311,729
547 68,436 .69 7,104,280
577 72,238 .67 6,895,122
608 76,040 .66 6,739,731 2x size