如果可使用的内存空间比较小,导致数据缓冲区的命中率较低,可以通过配置keep池和recycle池,把性质不同的表分离到不同的数据缓冲区,以提高命中率,降低批操作对正常访问的影响。
默认情况,所有表都是用default池,大小就是buffer cache的大小,由db_cache_size来决定。两个缓冲区的大小分别有参数db_keep_cache_size和db_recycle_cache_size来决定。
在8i中只能修改pfile,然后重启;在9i中可以动态修改,必须先缩小sga中其他内存缓冲区的大小,然后再增加上面两个值。
keep池用来缓存那些经常被访问的表。独立于default池。用户可以查询v$bh视图来找到经常被使用的表。
sql> col object_name format A30
sql> select o.object_name,count(*)
from dba_object o,v$bh bh
where o.object_id = bh.objd and o.owner !='sys'
group by o.object_name having count(*) > 100
order by count(*) desc;
计算keep池的命中率。
sql> select name,physical_reads,db_block_gets,consistent_gets,1-(physical_reads / (db_block_gets + consistent_gets)) "hit ratio"
from v$buffer_pool_statistics where name='keep';
recycle池用来缓存不希望保存在内存中的表。如很少进行扫描的表。调整db_recycle_cache_size的大小来设置recycle池。一般不要给recycle池很大的空间。
默认情况,所有表都是用default池,大小就是buffer cache的大小,由db_cache_size来决定。两个缓冲区的大小分别有参数db_keep_cache_size和db_recycle_cache_size来决定。
在8i中只能修改pfile,然后重启;在9i中可以动态修改,必须先缩小sga中其他内存缓冲区的大小,然后再增加上面两个值。
keep池用来缓存那些经常被访问的表。独立于default池。用户可以查询v$bh视图来找到经常被使用的表。
sql> col object_name format A30
sql> select o.object_name,count(*)
from dba_object o,v$bh bh
where o.object_id = bh.objd and o.owner !='sys'
group by o.object_name having count(*) > 100
order by count(*) desc;
计算keep池的命中率。
sql> select name,physical_reads,db_block_gets,consistent_gets,1-(physical_reads / (db_block_gets + consistent_gets)) "hit ratio"
from v$buffer_pool_statistics where name='keep';
recycle池用来缓存不希望保存在内存中的表。如很少进行扫描的表。调整db_recycle_cache_size的大小来设置recycle池。一般不要给recycle池很大的空间。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8570952/viewspace-713743/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8570952/viewspace-713743/