当我们经常访问的数据,如果想它长时间保存在内存中,我们一般把它保存在keep池中,而那些只访问一次的数据,我们一般把它放在recycle池中,短暂的保存。
11g中,这两个池的设置受到隐含参数_db_cache_advice_sample_factor的影响,如果设置的size过小,则db_keep_cache_size/db_recycle_cache_size(为4的倍数)的值受到该参数的影响,为db_cache_advice_sample_factor*cpu的个数
下面来看试验
SQL> alter system set db_keep_cache_size=4M;
SQL> show parameter db_keep
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_keep_cache_size big integer 8M
察看警告日志文件会看到如下信息
The value of parameter db_cache_sizeis below the required minimum
The new value is 4MB multiplied by the number of cpus
ALTER SYSTEM SET db_keep_cache_size='4M' SCOPE=BOTH;
可以说明该参数的设置必须大于4MB*cpu的个数
这个4m又是如何来的呢?
我们查看隐藏参数_db_cache_advice_sample_factor会看到如下描述
_db_cache_advice_sample_factor
4
cache advisory sampling factor
SQL> show parameter cache_advi
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_advice string ON
由于db_cache_advice的参数为on,所以建议会检查所设置的keep/recycle池的大小是否大于等于_db_cache_advice_sample_factor*cpu的个数,如果小于则自动设置为该值,同时kepp/recycle池的大小必须设置为_db_cache_advice_sample_factor的正数倍,如若不是,则建议会自动调整为该值以上的一个倍数值
SQL> alter system set db_keep_cache_size=10M;
系统已更改。
SQL> show parameter db_keep
NAME TYPE VALUE
------------------------------------ ----------- ------------------------
db_keep_cache_size big integer 12M
各个缓冲池的设置可以查看v$buffer_pool视图
SQL> select id,name,block_size,current_size,target_size from v$buffer_pool;
ID NAME BLOCK_SIZE CURRENT_SIZE TARGET_SIZE
---------- -------------------- ---------- ------------ -----------
1 KEEP 8192 12 12
2 RECYCLE 8192 8 8
3 DEFAULT 8192 268 268
阅读(1527) | 评论(0) | 转发(0) |