WAL

Definition:Write-Ahead Logging

WAL[Write-Ahead Logging]とは, あるトランザクションがデータベースの永続的状態[データページ]を変更する場合, その変更内容を記述したログレコードは, 対応するデータの書き込みよりも先に安定記憶装置へ書き込まれていなければならない, という規則である.

この原理は, Haerder & Reuter[1983]による「トランザクション指向型リカバリの原則」において次の二つの条件として定式化されたものが, 以後の標準的な理解として広く受け入れられている.

第一に, 任意の更新操作について, その更新を記述するログレコードは, 対応するデータページがディスクへ書き出される前に, 必ず永続化されていなければならない[WAL条件].これにより, たとえシステム障害によってデータページの書き込みが中断されたとしても, ログに基づいて変更の再適用[redo], あるいはコミットされていないトランザクションの取り消し[undo]を行うことが可能となる.なおundoは, 障害発生時点で未コミットのトランザクションが中途半端な状態でデータページに反映されている場合に, その影響を論理的に除去するために用いられる.

第二に, あるトランザクションがコミットされたと見なされるためには, そのトランザクションに属するすべてのログレコードが, 安定記憶装置上に完全に書き込まれていなければならない[コミット条件].これにより, コミット済みトランザクションの結果は障害後も必ず再現可能となり, 永続性[Durability]が保証される.

これら二つの条件はまた, バッファ管理ポリシーと密接に対応している.第1条件はデータページの書き出しタイミングに制約を課すものであり, コミット前であってもデータページをディスクへ追い出すことを許容する「Steal」ポリシーの採用を可能にする[ただし対応するログが先行して永続化されていることが前提となる].第2条件はコミット時のログの強制書き出しを要求するものであり, 「Force」ポリシーに相当する.現代の多くのシステムはStealかつNo-Force[コミット時にデータページ自体はディスクへ強制しない]という組み合わせを採用しており, このポリシーの下でWALはリカバリの正当性を担保する中核機構として機能する.

このようにWALは, データそのものではなく「変更の記録」を基準にして状態の正当性を管理する方式であり, 障害時にはログを基にしてデータベース状態を再構成することを可能にする.したがってWALは, トランザクション処理系における原子性[Atomicity]および永続性[Durability]を実現するための, 最も基礎的かつ普遍的な機構である.なお, WALは原子性と永続性の保証に直接寄与するものであり, 隔離性[Isolation]の保証は同時実行制御[ロックやMVCCなど]が担う別の機構に委ねられる点には留意が必要である.

なお, この原理はC. Mohan, Don Haderle, Bruce Lindsay, Hamid Pirahesh, Peter Schwarzによって1992年にACM Transactions on Database Systemsに発表された「ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging」において体系的に整理され, 以後の多くのデータベースシステムの実装基盤となっている.

参考文献

Mathematics is the language with which God has written the universe.





















追記型アーキテクチャ WALバッファ EML演算子の万能性 デザイン行列 線形Transformerの特殊なケースとしての最小二乗法 FFF