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