作者:dbtan |【转载时请以超链接形式标明文章出处作者信息】


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 -

相关日志