Oracle 数据库告警日志产生大量Checkpoint not complete的处理

(1)报错信息

Wed Sep 16 14:31:48 2020

Thread 1 cannot allocate new log, sequence 1715

Checkpoint not complete

  Current log# 1 seq# 1714 mem# 0: /U01/app/oracle/oradata/testdb/redo01a.rdo

  Current log# 1 seq# 1714 mem# 1: /U01/app/oracle/oradata/testdb/redo01b.rdo

Thread 1 advanced to log sequence 1715 (LGWR switch)

  Current log# 2 seq# 1715 mem# 0: /U01/app/oracle/oradata/testdb/redo02a.rdo

  Current log# 2 seq# 1715 mem# 1: /U01/app/oracle/oradata/testdb/redo02b.rdo

Thread 1 cannot allocate new log, sequence 1716

Checkpoint not complete

  Current log# 2 seq# 1715 mem# 0: /U01/app/oracle/oradata/testdb/redo02a.rdo

  Current log# 2 seq# 1715 mem# 1: /U01/app/oracle/oradata/testdb/redo02b.rdo

Thread 1 advanced to log sequence 1716 (LGWR switch)

  Current log# 3 seq# 1716 mem# 0: /U01/app/oracle/oradata/testdb/redo03a.rdo

  Current log# 3 seq# 1716 mem# 1: /U01/app/oracle/oradata/testdb/redo03b.rdo

Wed Sep 16 14:32:02 2020

(2)触发Checkpoint检查点进程的事件

(1)redo日志切换;

(2)LOG_CHECKPOINT_TIMEOUT 这个延迟参数的到达

(3)相应字节(LOG_CHECKPOINT_INTERVAL* size of IO OS blocks)被写到当前的重做日志

(4)ALTER SYSTEM SWITCH LOGFILE 这个命令会直接导致checkpoint发生

(5)ALTER SYSTEM CHECKPOINT

 (3)checkpoint not complete问题

         checkpoint被触发的条件之一是发生redo log switch,Checkpoint的具体工作包括:触发DBWr向磁盘写入dirty data,把checkpoint信息更新到datafile header和control file里。假设我们只有两个redo log group:group 1和group 2,并且buffer cache中总是有大量的dirty block需要写入datafile,当redo log从group 1 switch to group 2的时候,会触发checkpoint, checkpoint要求DBWr把buffer cache中的dirty block写入datafile。然而,当我们再次用完group 2里面的空间,需要再次switch to group 1并重用group 1的时候,如果我们发现redo log group 1所保护的那些dirty block还没有完全写入到datafile,整个数据库必须等待DBWr把所有的dirty block写入到datafile之后才能做其他的事情,这就是我们遇到的"checkpoint not complete"问题。

(4)cannot allocate new log

          Checkpoint will flush dirty block to datafile, 从而触发DBWn书写dirty buffer,等到redo log覆盖的dirty block全部被写入datafile后才能使用redo log(循环使用),如果DBWn写入过慢,LGWR必须等待DBWn完成,则这时会出现“checkpoint not completed!”。 所以当出现checkpoint not competed的时候,还会伴随cannot allocate new log的错误。

         Checkpoint是为了内存中已经被修改的数据块与磁盘数据文件同步的一种数据库事件。它提供了一种保持事务提交以后数据一致的手段。往Oracle磁盘写脏数据的机制与事务提交不是同步的。所以checkpoint有两个目的,一个是确保数据一致性,一个是使数据库能快速的恢复。

猜你喜欢

转载自blog.csdn.net/weixin_41561862/article/details/108828108