--------------------------------------
157125 bytes
结果指明当前分配给所有会话的内存。
调整共享池的保留空间
shared_pool_reserved_size为大的存储保留的shared_pool_size总量;
shared_pool_reserved_min_alloc-控制保留内存的分配;
要创建一个保留列表,shared_pool_reserved_size必须大于shared_pool_reserved_min_alloc。
优化共享池:
用以下语句检测命中率:
selectsum(pins)"pinned",sum(reloads)"reloaded" fromv$librarycache
pinned reloaded
---------- ---------
2474 17
命中率=pinned/reloaded
若命中率低可增大INIT.ORA中SHARED_POOL_SIZE的值。
调整快速缓存
利用缓存的命中率评价快速缓存的活动
select name,value from v$sysstat where name in (‘dbblock gets’,’consistent_gets’,’physical reads‘);
db block gets,consistent_gets其和为数据请求总数,physicalreads为数据请求导致访问磁盘数据文件的总数。
增加db_block_buffers应该遵循如下规则:
缓存命中率低于0.9;
前面增加的db_block_buffers有效
提高缓冲区命中率
如果缓冲命中率低,如小于60%或70%,那么需要增加缓冲区中的缓存数。方法是增大db_block_buffers的值。
表v$recent_bucket的每一行反映在缓存中增加一个缓冲区的相应性能值,其中rownum列比可能增加到缓存的缓冲区数小1;count列通过增加缓冲区数rownum+1到缓存,增加的缓冲区命中。
查询v$recent_bucket视图:select sum(count) ach from v$recent_bucket where rownum<20 ;
使用如下公式计算命中率(ACH为增加的命中次数):HitRatio=1-(physical reads-ACH/(db block gets+consistent gets) );
组合v$recent_bucket视图中的行,使用如下语句:select 250*TRUNC(ROWNUM/250)+1||’to’||250*(TRUNC(ROWNUM/250)+1) “Interval”,sum(count)”BufferCache Hits” from v$recent_bucket group by trunc(ROWNUM/250) ;
在命中率高时,删除不必要的缓存
减少参数DB_BLOCK_BUFFERS的值可以使缓存变小,(最小值为4)。
视图v$CURRENT_BUCKET包含对一个小缓存的性能统计,其列描述如下:
ROWNUM—缓存中可能的缓冲区数
COUNT—对缓冲区数ROWNUM的缓存命中数
初始参数DB_BLOCK_LRU_STATISTICS控制视图V$CURRENT_BUCKET的统计,默认值为FALSE,意味着不收集统计数据。将其设置为TRUE,视图V$CURRENT_BUCKET将收集统计。
查询V$CURRENT_BUCKET视图,如果当前缓存为100,如果想知道在90时,缓存非命中的增加数,使用如下语句:
SELECTSUM(COUNT) ACM FROM V$CURRENT_BUCKET WHERE ROWNUM>=90 ;
计算命中率(ACM为增加的非命中次数):HitRatio=1-(physical reads + ACM/(db block gets+consistent gets));
也可以将100个缓冲区分为4个25个缓冲区段:
select25*TRUNC(ROWNUM/25)+1||’to’||25*(TRUNC(ROWNUM/25+1)”Interval”,sum(count)”BufferCache Hits” from v$CURRENT_BUCKETwhere rownum>0 group byTRUNC(ROWNUM/25));
其中INTERVAL为缓冲区段,BUFFER CACHE HITS为对应段的缓存命中率。
优化数据库缓冲区高速缓存:
select name,value from v$sysstat where namein ('db block gets','consistent gets','physical reads') ;
NAME VALUE
------------------------- ---------
db block gets 3700
consistent gets 17603
physical reads 523
计算公式:
Hit Ratio = 1-(physical reads / ( db blockgets + consisten gets))
若命中率低可以加大INITXXX.ORA中DB_BLOCK_BUFFER的值。
调整多缓冲池
多缓冲池特性概述
可以使用keep缓冲池来维护缓存中的实体,使用recycle缓冲池来防止实体占用缓存中不必要的空间;
可以将大的数据段置于独立的recycle缓存中,将小的数据段置于独立的keep缓存中。
何时使用多缓冲池
1.查找oracle内部实体数据段的数目:
selectdata_object_id,object_type from user_objects where object_name=’
2.查找对应该段名的缓存中的缓冲区数:
selectcount(*) buffers from x$bh where obj=
3.查找实例中的缓冲区总数:
select value “totalbuffers ” from v$parameter where name=’db_block_buffers’ ;
4.计算当前有指定段使用的缓存所占的比率:
%cache used bysegment_name=buffers(step 2)/buffers(step 3);
使用多缓冲池调节缓存
减少I/O操作;
隔离缓存中的实体;
限制实体在缓存中的一个部分
使多缓冲池生效
定义新缓冲池:使用初始参数BUFFER_POOL_NAME来定义缓冲池,每个缓冲池可以指定两个属性:缓冲池中的缓冲区数;分配该缓冲池的LRU latches数。
用于定义缓冲池的初始参数有:
BUFFER_POOL_KEEP-定义keep缓冲池
BUFFER_POOL_RECYCLE-定义recycle缓冲池
DB_BLOCK_BUFFERS-定义数据库实例的缓冲区数
DB_BLOCK_LRU_LATCHES-定义数据库实例的LRU latches数
Oracle8定义了三个缓冲池:keep,recycle和default。其中default缓冲池是已经存在的。
使用多缓冲池
为一个实体建立一个默认缓冲池,语法为:
BUFFER_POOL{KEEP| RECYCLE | DEFAULT}
如何