log file switch (checkpoint incomplete)和Redo log状态分析

今天用户投诉系统慢,查DB,出现大量的log file switch (checkpoint incomplete) event的进程.

查redo log的status:

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIV STATUS                           FIRST_CHANGE# FIRST_TI

---------- ---------- ---------- ---------- ---------- ------ -------------------------------- -----

         1          1      97783  524288000          2 YES    ACTIVE                              7.9606E+10 2013-07-23 14:13

         2          1      97782  524288000          2 YES    ACTIVE                              7.9606E+10 2013-07-23 14:05

         3          1      97784  524288000          2 NO     CURRENT                        7.9606E+10 2013-07-23 14:19

 

原因为大量IO,DBWn未能及时将dirty cache data写入datafile,而造成redo log未能正常切换.解决方法,在现有的硬件的状态下,增加redo log file或增大redo log的size即可.

该下不探讨解决方法,而是提出一个疑问:

   我们知道,当redo log switch时发触发一个完全检查点,checkpoint将完成以下动作:

1. LGWR清空日志缓存,将重做记录写入redo log.

2.DBWn将脏数据写入datafile

3.CKPT将最新SCN及RBA写入数据文件头部及控制文件.

    我们再来了解一下redo log active状态下是一个什么的情况.当日志写满或alter system switch logfile时,LGWR会触发切换日志,新产生的日志的status就是Current,旧的日志会是Inactive或Active,Inactive是指可以被覆盖了,Active呢?Active和Current一样,是实例恢复所需要的,不能覆盖,那Active时,该redo log在玩些什么呢?Active时,代表datafile最近一次rba(scn)小于该日志最后一条重做记录的rba(scn),

   如此,就有一问题 :

  当下current的redo3,之前由redo2 switch来的,但switch log file时发生检查点应将redo log所有重做记录涉及的脏数据已写入datafile了,那又何来datafile的scn少于该日志的scn呢?

  原因应为,LGWR和DBWn是并行工作的,switch log file是触发的检查点只是将脏数据写入datafile的任务分给DBWn,然后LGWR就自己去产生新的日志继续写了,而不是等checkpoint完成后才生出新的日志继续干活.当脏数据比较多的时候,DBWn忙不过来,就只能一直active住日志文件了.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值