Chinaunix

标题: ORACLE 后台进程之------LGWR [打印本页]

作者: caoms2011    时间: 2011-12-21 08:44
标题: ORACLE 后台进程之------LGWR

        LGWR是一个非常重要的后台进程,主要负责将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个Redo记录的条目大致可以认为是:

事务标示Transaction identifier

列信息Column address(File Block Row Column)

列的值Value of the column that changed

 

        而日志缓冲区是一个循环缓冲区。在LGWR将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。

LGWR工作的主要条件如下:

l           用户提交

l           有1/3 重做日志缓冲区未被写入磁盘

l           有大于1MB重做日志缓冲区未被写入磁盘

l           超时

l           DBWR需要写入数据的SCN号大于LGWR记录的SCN号,DBWR触发LGWR写入

 

 

       所以,有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅在事务提交后才永久化。 Oracle使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入联机日志文件,但对应的数据缓冲区的数据块的改变,也就是上面说的“脏”数据,一直要等到满足条件才被DBWn写入数据文件。这样做的主要目的就是可以快速提交事务并返回给用户提交信息,但是又能确保事务的完整性。

当事务提交时,它被赋给一个系统修改号(SCN),同事务日志项一起记录在日志中。在Oracle 中,SCN是一个很重要的概念,贯穿整个Oracle体系结构。由于SCN也记录在日志中,所以,系统故障需要系统恢复的时候,就可以很容易地根据SCN来恢复。

如下图所示,Log Buffer默认大致可以分为三个部分,当写满其中一个部分,或者是遇到提交的时候,都会导致LGWR写数据。另外,LGWR也会有3s的超时限制,超过这个时间还没有写日志将会强制写,或者是大于1MB的限制也会强制写。因此基于以上的限制,在频繁提交的OLTP系统中,根本不需要有太大的Log buffer。

  LGWR写进程

http://ajava.org/readbook/db/gjorazj/12666.html






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2