Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27728
  • 博文数量: 5
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-12 13:28
文章分类

全部博文(5)

文章存档

2011年(5)

我的朋友

分类: Oracle

2011-05-29 18:56:03

        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写进程

阅读(5502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~