log file switch (checkpoint incomplete)とは

log file switch (checkpoint incomplete)はカレントのredoログファイルへの書き込みがいっぱいになったことで 次のredoログへスイッチしようとしているが、他のredoログのcheckpointが終了していないためスイッチできず、待機させられている状態で発生する待機イベントです。 log file switch (checkpoint incomplete)が発生している間はredoログを吐くことができないため他のセッション含め一切の更新ができず、checkpointが終了するまで一時的にハングした状態となります。 このような性質のためこの待機イベントの発生があること自体がシステム全体がストップ・ザ・ワールドになりえる危険な状態であると考えてください。

500 Internal Server Error

500 Internal Server Error


nginx/1.18.0 (Ubuntu)

対策

この待機イベントが発生している間は裏でDBWRがcheckpointを実行している状態であり 特に何かしらの対処をせずともcheckpointが完了すれば自然解消します。 頻繁に発生する場合はredoログファイルのグループ数を増やすかサイズを大きくすることで発生を抑えることが可能です。 なお、ORACLE社推奨のredoログスイッチ間隔は1時間に2~3回程度のスイッチ頻度であるためこれを目安にサイズ調整するとよいでしょう。

TIPS

log file switch (checkpoint incomplete)が発生するとアラートログに出力がされます。 以下は12.2のアラートログ例ですが、この出力より2018-11-05 23:03:23~2018-11-05 23:03:25までの間log file switch (checkpoint incomplete)が発生する状態となっており この間更新が一切ハングしていた、と判断することができます。

Thread 1 advanced to log sequence 14 (LGWR switch)
  Current log# 2 seq# 14 mem# 0: F:\ORACLE\ORADATA\ORCL122\REDO02.LOG
2018-11-05T23:03:14.176804+09:00
PDB1(3):Resize operation completed for file# 10, old size 158720K, new size 163840K
2018-11-05T23:03:16.066931+09:00
PDB1(3):Resize operation completed for file# 10, old size 163840K, new size 168960K
2018-11-05T23:03:23.817078+09:00
Thread 1 cannot allocate new log, sequence 15
Checkpoint not complete
  Current log# 2 seq# 14 mem# 0: F:\ORACLE\ORADATA\ORCL122\REDO02.LOG
2018-11-05T23:03:25.095756+09:00
Thread 1 advanced to log sequence 15 (LGWR switch)
  Current log# 3 seq# 15 mem# 0: F:\ORACLE\ORADATA\ORCL122\REDO03.LOG
500 Internal Server Error

500 Internal Server Error


nginx/1.18.0 (Ubuntu)