Redo write触发的四种情况

标签: redo write | 发表时间:2012-06-01 20:51 | 作者:wudiisss
出处:http://blog.csdn.net
1、当LGWR空闲的时候,会每隔3秒检查一次是否有从redo buffer写入redelog中的数据,如果有,一个后台进程就会自动的执行将其写入
2、当有进程要从redo buffer中分配空间时,会先计算redo buffer中已经占用的空间,如果该空间大于_log_io_size这个参数值,并且此时的LGWR处于空闲状态,便会被激活执行后台写。_log_io_size的默认值是redo buffer大小的三分之一,从8.0开始, _log_io_size 的上限值是1M,和其他的hidden参数一样,如果没明确的设置,在X$KSPPSV视图中查出的值为0

3、当一个事物commit时,会产生一个commit标志在redo流中,在redo buffer中的log包括commit标志写入硬盘之前,这个事物是不可恢复的,因此在给用户返回类似‘Commit complete’之前,必须等待LGWR将redo buffer中写入硬盘,在commit后会激活LGWR并且sleeps on a  log file sync wait with a timeout of 1 second。为了避免等待

可以将 _wait_for_sync 参数设置成false,但是这样就不能保证已经commit的的事物实例失败时可以恢复。

_log_io_size 和  _wait_for_sync  都是隐藏参数,可以通过下面的sql查看其值

select  i.ksppinm name,  i.ksppdesc description,  cv.ksppstvl value,  
cv.ksppstdf isdefault,  decode(bitand(cv.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismodified, 
decode(bitand(cv.ksppstvf,2),2,'TRUE','FALSE') isadjusted 
from  sys.x$ksppi i, 
sys.x$ksppcv cv  
where i.inst_id=userenv('Instance') and  
cv.inst_id=userenv('Instance') and 
i.indx=cv.indx and i.ksppinm like '/_%' escape '/'  order by  replace(i.ksppinm,'_','');

 


需要注意的是在回调语句中的commit并不会等待LWGR写入,例如存储过程中可能会有n个commit操作,但只有当药返回给用户执行结果的时候才会等待LWGR写入,即只会sync最后一个commit操作。

 

一个SGA变量( kcrfshsb, according to bug 182447)是用来确定最大的需要同步的log block号,当LGWR处于激活的状态过程中即正在像disk中写时,几个不同的实例事物执行commit操作, kcrfshsb 变量记录了需要同步的最高块号,这些commit会全部写入disk中在一次redo write中,称为group commit

 

4、当DBWn需要写入一个或多个块的high RBA ,并且high rba超出了on-disk RBA时,从8i开始将这些块放入延迟队列并且post LGWR来同步最高的RBA,但是不会等待,DBWn会继续执行其他的不需要延迟的写,在8i以前,DBWn会sleep发生a  log file sync wait。

作者:wudiisss 发表于2012-6-1 20:51:21 原文链接
阅读:11 评论:0 查看评论

相关 [redo write] 推荐:

Redo write触发的四种情况

- - CSDN博客推荐文章
1、当LGWR空闲的时候,会每隔3秒检查一次是否有从redo buffer写入redelog中的数据,如果有,一个后台进程就会自动的执行将其写入. 2、当有进程要从redo buffer中分配空间时,会先计算redo buffer中已经占用的空间,如果该空间大于_log_io_size这个参数值,并且此时的LGWR处于空闲状态,便会被激活执行后台写.

REDO管理

- - CSDN博客数据库推荐文章
一、什么是REDO LOG.  REDOLOG文件是十分重要的文件,它记录了Oracle的所有变化,是数据库实例恢复机制中最为关键的组成部分.     GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME     NEXT_CHANGE# NEXT_TIME.

Oracle online redo log 扫盲

- - CSDN博客数据库推荐文章
Oracle 的日志分为:ONLINE REDO LOG 和 archived log. 一个数据库至少要有2组 redo log,每组 redo log 至少要有一个 member(出于安全考虑,建议每组 redo log 至少有 2 个多元化的 redo log member). redo log 循环使用,当一组日志写满后,就会切换到下一组日志.

编程每一天(Write Code Every Day)

- - 博客园_知识库
   英文原文: Write Code Every Day.   去年秋天,我的个人项目似乎走到了尽头:我一直没能取得必要的进展,在不牺牲我的主业( 可汗学院的全职工作) 的情况下,我无法完成更多的个人编程事项.   我个人项目上的工作始终存在着几个严重问题. 我把这些工作主要放在周末,但有时也可能是周末的晚上.

Write or die:不能停笔的写作应用

- tossking - 爱范儿 · Beats of Bits
作家 Alisa Bowman 在文章《如何写得快》中,认为如果要写得快,就“不能停笔”:. 一开始就不要停下,除非你脑中在没有词可以涌出. 不要因为拼写错误而停下,不要因为语法而停下,不要因为反复思量而停下. Write or Die(WoD),就是一个让你“不能停笔”的应用. 如果停下笔来,它就会惩罚你,直到你重新提笔写作为止.

how to write extension for firefox -- 如何给firefox编写插件

- - CSDN博客Web前端推荐文章
1.1 创建一个dev profile. 1.3 创建或者修改一些preference. 1.4 启动firefox. 使用-no-remoet可以使你同时用自己平时使用的profile浏览网页,和你开发的profile互补干扰. Note 1:当你修改install.rdf中有关firefox的compatile version时,有时会提示你版本不兼容当前的firefox,不要理会,.

redo log大量生成的诊断处理流程

- - CSDN博客推荐文章
redo log大量生成的诊断处理流程. 本文是原创文章,转载请注明出处:. 1.获得归档日志暴增时段的一个归档日志:可以查询v$archived_log视图,结合completion_time列进行定位. 2.对该归档日志进行转储dump.    --请将路径修改成当时的redo归档的路径.   以上命令会在user_dump_dest中生成一个trace文件,请将该trace文件传到linux中(root用户or oracle用户均可).

如何定位那些SQL产生了大量的redo日志

- - ImportNew
在ORACLE数据库的管理、维护过程中,偶尔会遇到归档日志暴增的情况,也就是说一些SQL语句产生了大量的redo log,那么如何跟踪、定位哪些SQL语句生成了大量的redo log日志呢. 下面这篇文章结合实际案例和官方文档“How to identify the causes of High Redo Generation (文档 ID 2265722.1)”来实验验证一下.

HBase如何合理设置客户端Write Buffer - 大圆那些事 - 博客园

- -
大圆那些事| 转载请以超链接形式标明文章原始出处和作者信息. HBase客户端API提供了Write Buffer的方式,即批量提交一批Put对象到HBase服务端. 本文将结合HBase相关源码,对其进行深入介绍,分析如何在实际项目中合理设置和使用它. 什么时候需要Write Buffer. 默认情况下,一次Put操作即要与Region Server执行一次RPC操作,其执行过程可以被拆分为以下三个部分:.

理解数据库中的undo日志、redo日志、检查点 | 乐天的个人网站

- -
数据库存放数据的文件,本文称其为data file. 数据库的内容在内存里是有缓存的,这里命名为db buffer. 某次操作,我们取了数据库某表格中的数据,这个数据会在内存中缓存一些时间. 对这个数据的修改在开始时候也只是修改在内存中的内容. 当db buffer已满或者遇到其他的情况,这些数据会写入data file.