WAL(Write-Ahead Logging)プロトコルは、データベースにおけるトランザクションの安全性と整合性を保つための手法です。
参考 トランザクションとは
WALプロトコルの基本的な動作は、データベースに変更を加える前に、その変更内容をログ(通常はディスク上)に先に書き込むことです。こうしておくことで、仮にデータベースに何らかの障害が発生したとしても、後からログを用いることでデータベースの整合性を保つことが可能になります。

このページではWALプロトコルの基本的な動作・必要性について初心者向けにわかりやすく解説します。
プログラマーやシステムエンジニアを目指す方であれば、知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。
WALプロトコル(ログ先行書き込み)とは?
WAL(Write-Ahead Logging)プロトコルは、コンピュータがデータを保存する際に、まずその操作を別の場所(ログ)に記録してから実際にデータを更新する方法です。

こうすることで、何か問題が起きたときに、元のデータに戻せる安全策を持つことができるということ。ログさえあれば、後からどうにでも復旧できる!という考え方から編み出されたプロトコルです。
WALプロトコルの基本的な動作
WALプロトコルは、まず「ログ」に何をするか書き留めてから、実際にデータベースを変更します。もし何か問題が発生したら、このログを使ってデータベースを元に戻します。
例 日常生活でWALプロトコルを例えてみる・・・
- ログに記録する(予告): まず、「太郎さんの財布に1万円追加する」という操作をログに書き込みます。
- 実際に操作する: 次に、太郎さんの財布に実際に1万円追加します。
この2ステップがうまくいけば、すべて完了です。

でも、以下のような障害が発生してしまうとどうでしょうか?
- 電源が突然切れた場合
- ソフトウェアがクラッシュした場合
このような場合には、ログを確認して、「太郎さんの財布に1万円追加する」操作がちゃんと完了したかどうかを調べます。もし完了していれば、何も問題ありませんが、完了していなければ、ログに書かれた通りに再度操作をします。
このように、WALプロトコルは「事前に予告」してから「実行」することで、何か問題が発生したときにも安全にデータを扱うことができます。
更新前情報と更新後情報をログとして利用するDBMSにおいて,ログを先に書き出すWAL(Write Ahead Log)プロトコルに従うとして,処理①~⑥を正しい順番に並べよ。
- begin transactionレコードの書出し
- データベースの実更新
- ログに更新前レコードの書出し
- ログに更新後レコードの書出し
- commitレコードの書出し
- end transactionレコードの書出し
①→③→④→②→⑤→⑥
解説
- ①begin transactionレコードの書出し: トランザクションが開始されたことをログに書き出します。これがトランザクションのスタート地点となります。
- ③ログに更新前レコードの書出し: 更新する前のデータ(更新前情報)をログに書き出します。これにより、何らかの問題が発生した場合に、元の状態に戻すための情報が確保されます。
- ④ログに更新後レコードの書出し: 更新した後のデータ(更新後情報)もログに書き出します。この情報を用いて、トランザクションが正常に完了したかどうかを後で確認できます。
- ②データベースの実更新: このステップで初めて、データベースに対して実際の更新が行われます。
- ⑤commitレコードの書出し: 更新が成功した場合、その事実をログに書き出します(commit)。これにより、このトランザクションが正常に完了したという証となります。
- ⑥end transactionレコードの書出し: トランザクションが終了したことを明示的にログに書き出します。

以上の手順により、WALプロトコルはデータベースの整合性を保ちつつ、障害が発生した場合のリカバリー(復旧)も可能にしています。
DBMSごとのWALプロトコルの実装例
WALプロトコルの基本的な意味と動作を理解したところで、実際に各DBMSごとのWALプロトコルの実装例を簡単に記載しておきます。
DBMS | 実装名 | ログファイル | その他の特徴 |
---|---|---|---|
PostgreSQL | WAL (Write-Ahead Logging) | WALセグメント | レプリケーション、PITR対応 |
MySQL (InnoDB) | Redo Log | ib_logfile0 , ib_logfile1 | チェックポイントメカニズム |
SQLite | WAL (Write-Ahead Logging) | -wal 拡張子のWALファイル | メモリ使用量を抑制 |
Microsoft SQL Server | トランザクションログ | N/A | LSN(Log Sequence Number)を使用 |
WALプロトコルのまとめ
SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?
とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。