checkpoint未完成, 不能分配新的日志
2024-07-21 02:34:17
供稿:網友
當Oracle重用一個日志文件的時候,該日志文件所保護的處于Buffer cache中的臟塊(dirty buffer),必須寫回磁盤,且必須紀錄checkpoint的位置在控制文件和數據文件頭。這個過程叫做檢查點checkpoint. 發生checkpoint not complete, cannot allocate new log ,表示要重用的日志文件的檢查點還沒有完成,被日志文件保護的臟塊還沒有完全被寫回磁盤。必須等待該日志文件的checkpoint完成,才可以重新使用該日志文件。 V$LOG中STATUS為Active的,表示日志文件checkpoint未完成,Inactive表示checkpoint完成,current表示為當前LGWR寫的日志文件。在實例恢復的時候,oracle需要使用到處于Active和Current狀態的日志文件。 當因為檢查點沒有完成而不能重用日志文件的時候,從v$session_wait中可以看到很多session等待log file switch (checkpoint incomplete)事件,系統基本處于hang的狀態。 我碰到一些情況是因為磁盤存在壞塊,影響DBWR I/O.還需要注重其他問題 日志文件太少。 日志文件過大和檢查點參數設置原因,導致檢查點發生不頻繁。 DBWR效率不高,I/O等待繁忙。 設置log_checkpoints_to_alert = TRUE后可以在alert.log中看到checkpoint發生情況,包括開始和結束標記。 here is the begin of the checkpoint on the data PRotected by log 2 Beginning log switch checkpoint up to RBA [0x1a01.2.10], SCN: 0x0000.644a1dbb
Thread 1 advanced to log sequence 6657
Current log# 3 seq# 6657 mem# 0: /redo02/oradata/eisp/redo3a.log
Current log# 3 seq# 6657 mem# 1: /extra01/oradata/eisp/redo3b.log Arch finished copying log 2 for us here
Tue Feb 25 05:06:35 2003
ARC0: Beginning to archive log# 2 seq# 6656
Tue Feb 25 05:07:00 2003
ARC0: Completed archiving log# 2 seq# 6656
Tue Feb 25 05:51:12 2003
Beginning log switch checkpoint up to RBA [0x1a02.2.10], SCN: 0x0000.644a251e
Thread 1 advanced to log sequence 6658
Current log# 1 seq# 6658 mem# 0: /redo01/oradata/eisp/redo1a.log
Current log# 1 seq# 6658 mem# 1: /redo02/oradata/eisp/redo1b.log
Tue Feb 25 05:51:12 2003
ARC0: Beginning to archive log# 3 seq# 6657
Tue Feb 25 05:51:35 2003
ARC0: Completed archiving log# 3 seq# 6657
Tue Feb 25 06:39:05 2003
Thread 1 cannot allocate new log, sequence 6659
Checkpoint not complete Current log# 1 seq# 6658 mem# 0: /redo01/oradata/eisp/redo1a.log
Current log# 1 seq# 6658 mem# 1: /redo02/oradata/eisp/redo1b.log Here is where the checkpoint finished up -- the one started for number 2
Tue Feb 25 06:56:30 2003
Completed checkpoint up to RBA [0x1a01.2.10], SCN: 0x0000.644a1dbBTue Feb 25 06:56:30 2003
Beginning log switch checkpoint up to RBA [0x1a03.2.10], SCN: 0x0000.644a2b29
Thread 1 advanced to log sequence 6659
Current log# 2 seq# 6659 mem# 0: /redo01/oradata/eisp/redo2a_NEW.log
Current log# 2 seq# 6659 mem# 1: /extra01/oradata/eisp/redo2b.log
有時候checkpoint完成需要很多時間,可能是DBWR有很多dirty buffer要寫回磁盤。假如log files 500meg,它可能保護著幾gigabytes的diry buffer(修改一block可能只需要幾十byte redo,但DBWR checkpoint就要寫8k的block)。這種情況下,推薦用較小的日志文件或者配置參數使checkpoint發生更頻繁。