Oracle 9i Redo的增强:
在Oracle 9iR2中,Oracle通过LOG_PARALLELISM定义Oracle中redo allocation的并发级别。如果定义LOG_PARALLELISM大于1,那么数据库将分配多个共享的Redo Log Buffer区域,每个共享Buffer都有独立的Redo Allocation Latch进行保护,从而提高了Redo的并发性能,多个Redo Log Buffer可以被看作是Redo Log Buffer的子池,与Shared Pool的多SubPool原理类似。多Redo Log Buffer机制又被称为Public Redolog Strands。
如果你使用的是高端服务器,有超过16个处理器,并且经历非常高的Redo Allocation Latch竞争,那么可以考虑启用并行Redo。允许并行Redo生成能够增加更新密集型数据库的吞吐量,可以通过考察v$latch视图观察Redo Allocation Latch竞争的累计等待时间。
通过如下查询可以获得相关Latch信息:
sys@TQGZS> select substr(ln.name,1,20),gets,misses,immediate_gets,immediate_misses
2 from v$latch l ,v$latchname ln
3 where ln.name in ('redo allocation','redo copy') and ln.latch# = l.latch#;
SUBSTR(LN.NAME,1,20) GETS MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
-------------------- ---------- ---------- -------------- ----------------
redo copy 35 0 9892 4
redo allocation 699 1 9892 2
如果MISSES对GETS比率超过1%,或者IMMEDIATE_MISSES对(IMMEDIATE_GETS+IMMEDIATE_MISSES)比率超过1%,那么通常认为存在Latch竞争。
当主机拥有16~64个CPU时,Oracle公司推荐设置LOG_PARALLELISM在2~8之间。你可以从低值(例如:2)开始,以1为步长增进直到Redo Allocation Latch竞争不再激烈,这个参数的设置可以提高应用的性能。大于8的LOG_PARALLELISM设置通常不被推荐。
在Oracle 9iR2中,该参数的缺省值为1,缺省的Redo Allocation Latch也仅有一个,可以通过下面语句查询:
select addr,latch#,child#,name,gets,immediate_gets,immediate_misses
from v$latch_children where name='redo allocation';
- The End -