技术开发 频道

log buffer及日志管理深入分析及性能调整(二)

 
我们可以用一个图来描述一下上面所说的日志缓冲区的管理过程,如下图四所示。
  
                      图四
上面详细介绍了重做记录的生成过程,现在详细介绍一下LGWR写重做记录的过程。

当LGWR进程启动时,
1) 首先会尝试获取redo writing latch,以确保其他前台进程不会继续触发LGWR进程。
2) 然后会获取redo allocation latch,这是为了防止前提进程继续分配更多的日志缓冲区,否则日志缓冲区中的待写入日志文件的日志块不断增长,LGWR是无法确定到底应该写多少日志块的。

3) 在获得了redo allocation latch以后,LGWR开始确定应该写哪些日志块到日志文件。从上次LGWR启动以来所写的最后一个日志块到这个时间点时的最后一个被使用的日志块,这段范围内的日志块都是要被写入日志文件的,其中既包含写满的日志块,也可能包含还没有写满的日志块。特别注意,这个时候,可能还有前台进程正在向这段范围中的日志块拷贝重做记录。因为LGWR启动时,并不会阻碍前台进程获得redo copy latch,也就不会阻碍前台进程拷贝重做记录了。这样的话,LGWR就不会阻碍前台进程向日志缓冲区的其他可用的日志块中拷贝重做记录了。

4) 在确定了要写哪些日志块以后,生成一个新的SCN号。
5) LGWR释放redo allocation latch,并释放redo writing latch。
6) LGWR会等待前台进程完成对LGWR所要写入文件的日志块的更新操作。这是通过判断这些待写的日志块上的redo copy latch是否都被释放来决定的。
7) LGWR将第4步生成的SCN号拷贝进待写的日志块的块头里,触发物理写操作,将这些待写日志块写入联机日志文件里去。
(待续......) 

0
相关文章