第4章 · トランザクションと同時実行制御·v1.0.0·更新 2026/7/10·読了目安 約16分
変更要約: 初版
4.4障害回復とログ
この節の要点
更新をデータ本体より先にログへ記録するWAL(ログ先書き)の原則、回復開始点を短縮するチェックポイント、そして障害後のUNDO/REDOによるロールバック/ロールフォワード、トランザクション障害/媒体障害/システム障害という障害種別ごとの回復方式を学び、耐久性を守るための判断力を養います。
データベースサーバの突然の電源断やディスク障害に備えるDBAにとって、「どのログ方式・チェックポイント間隔・回復手順を採るか」は、耐久性の保証と回復時間(RTO)のバランスを左右する重要な判断です。ログを取りすぎれば書き込みオーバーヘッドが増え、チェックポイントを疎にしすぎれば障害後の回復に時間がかかります。この節では、障害の種別に応じてどの回復方式を適用すべきかを判断する視点を養います。
4.4.1WAL(ログ先書き)の原則
- WAL(Write-Ahead Logging・ログ先書き)=データベース本体(データページ)への変更を実際にディスクへ反映する前に、その変更内容をログ(更新前ログ・更新後ログ)として先に不揮発性記憶へ書き込んでおく原則。この順序を守ることで、データ本体への反映が完了する前に障害が起きても、ログさえ残っていれば変更内容を再現・取消できるため、耐久性と一貫性の両方を保証する土台になる。
- WALの原則があるからこそ、DBMSはデータ本体への書き込みを遅延させて(バッファリングして)まとめて行うことで書き込み性能を高められる——ログさえ先に確実に書いておけば、データ本体の反映が多少遅れても障害時にログから復元できるため安全性は損なわれない。ログの書き込み自体は追記(シーケンシャルライト)が中心のため、ランダムI/Oが必要なデータページ更新より高速に行える。
4.4.2チェックポイントとUNDO/REDO
- チェックポイント=ある時点までのログの内容をデータ本体へ確実に反映し、その時点を記録しておく処理。障害回復時は、ログの先頭からではなく直近のチェックポイント以降のログだけを読めばよいため、回復に要する時間を大幅に短縮できる。チェックポイントの間隔を狭めるほど回復は速くなるが、チェックポイント処理自体のI/O負荷が増え通常運用時の性能に影響する。
- 障害回復はUNDO(取消)とREDO(再実行)の組み合わせで行う。REDO=チェックポイント以降ログに記録されているがデータ本体にまだ反映されていないCOMMIT済み変更をログから再適用する処理(ロールフォワード)。UNDO=チェックポイント以降に開始されたがCOMMITされていない(障害時点で未完了の)トランザクションの変更を取り消す処理(ロールバック)。多くのDBMSはこの2つを「REDO(前方へ再適用)してからUNDO(未完了分を巻き戻す)」という順で組み合わせる。

