WAL(Write-Ahead Logging)プロトコルは、データベースにおけるトランザクションの安全性と整合性を保つための手法です。
参考 トランザクションとは
WALプロトコルの基本的な動作は、データベースに変更を加える前に、その変更内容をログ(通常はディスク上)に先に書き込むことです。こうしておくことで、仮にデータベースに何らかの障害が発生したとしても、後からログを用いることでデータベースの整合性を保つことが可能になります。
このページではWALプロトコルの基本的な動作・必要性について初心者向けにわかりやすく解説します。
プログラマーやシステムエンジニアを目指す方であれば、知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。
WALプロトコル(ログ先行書き込み)とは?
WAL(Write-Ahead Logging)プロトコルは、コンピュータがデータを保存する際に、まずその操作を別の場所(ログ)に記録してから実際にデータを更新する方法です。
こうすることで、何か問題が起きたときに、元のデータに戻せる安全策を持つことができるということ。ログさえあれば、後からどうにでも復旧できる!という考え方から編み出されたプロトコルです。
WALプロトコルの基本的な動作
WALプロトコルは、まず「ログ」に何をするか書き留めてから、実際にデータベースを変更します。もし何か問題が発生したら、このログを使ってデータベースを元に戻します。
例 日常生活でWALプロトコルを例えてみる・・・
- ログに記録する(予告): まず、「太郎さんの財布に1万円追加する」という操作をログに書き込みます。
- 実際に操作する: 次に、太郎さんの財布に実際に1万円追加します。
この2ステップがうまくいけば、すべて完了です。
でも、以下のような障害が発生してしまうとどうでしょうか?
- 電源が突然切れた場合
- ソフトウェアがクラッシュした場合
このような場合には、ログを確認して、「太郎さんの財布に1万円追加する」操作がちゃんと完了したかどうかを調べます。もし完了していれば、何も問題ありませんが、完了していなければ、ログに書かれた通りに再度操作をします。
このように、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をちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。