eygle.com   eygle.com
eygle.com  
 

« February 10, 2005 | Blog首页 | February 12, 2005 »



February 11, 2005

关于redo copy latch的说明

作者:eygle

出处:http://blog.eygle.com

一个进程产生redo时首先需要获得redo copy latch,获得了该latch以后才能把redo拷贝到Log Buffer中。
redo copy latch表明进程正在把redo拷贝入log buffer中,在此过程中,LGWR应该等待直到进程拷贝完成才能把目标Log buffer Block写入磁盘。

初始化参数_LOG_SIMULTANEOUS_COPIES,定义允许同时写redo的redo copy latch的数量。
在Oracle7和Oracle8里,_LOG_SIMULTANEOUS_COPIES缺省的等于CPU的数量。
从Oracle8.1.3开始,缺省的_LOG_SIMULTANEOUS_COPIES变成2倍的CPU数量,并且成为了一个隐含参数:

SQL> @d:\script\gethiddenpar
Enter value for par: log_simul
old  14:   x.ksppinm like '%_&par%'
new  14:   x.ksppinm like '%_log_simul%'

NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_log_simultaneous_copies       2                         TRUE      FALSE      FALSE

获得隐含参数的脚本,请参考如何获得Oracle的隐含参数

SQL> col name for a20
SQL> select addr,latch#,child#,name,gets,immediate_gets,immediate_misses
  2  from v$latch_children where name = 'redo copy';

ADDR         LATCH#     CHILD# NAME                       GETS IMMEDIATE_GETS IMMEDIATE_MISSES
-------- ---------- ---------- -------------------- ---------- -------------- ----------------
6C19A1B4        136          1 redo copy                     6         107939              181
6C19A29C        136          2 redo copy                     7              3                0

注意:LGWR进程必须获得所有的redo copy latch,然后才能将Log Buffer写入Log File.
redo copy latch获取以后,紧接着需要获取redo allocation latch ,分配redo空间,空间分配完成以后,redo allocation latch 即被释放,进程把PGA里临时存放的redo信息COPY入redo log buffer,COPY完成以后,redo copy latch 释放。

在完成redo copy以后,Process可能需要通知LGWR去执行写出(如果redo copy是commit等因素触发的)。
为了避免LGWR被不必要的post,进程需要先获取redo writing latch去检查LGWR是否已经激活或者已经被Post。如果LGWR已经激活或被Post,redo writing latch将被释放。

SQL> col name for a20
SQL> select addr,latch#,name,gets,misses,immediate_gets,immediate_misses
  2  from v$latch where name='redo writing';

ADDR         LATCH# NAME                       GETS     MISSES IMMEDIATE_GETS IMMEDIATE_MISSES
-------- ---------- -------------------- ---------- ---------- -------------- ----------------
0217ECC8        113 redo writing               2265          0              0                0

如果redo writing latch竞争过多,可能意味着你的提交过于频繁.
通过系统统计信息或statspack可以获得这些信息,具体参考:Statspack之十四-"log file sync" 等待事件

在执行redo copy的过程中,进程以log file sync事件处于等待。

当进程从log file sync中等待中醒来以后,进程需要重新获得redo allocation latch检查是否相应的redo已经被写入redo log file,如果尚未写入,进程必须继续等待。

参考:
http://www.ixora.com.au/notes/redo_latching.htm

Posted by eygle at 10:48 AM | Comments (3)



CopyRight © 2004-2008 eygle.com, All rights reserved.