PR

WAL(ログ先行書き込み)プロトコルとは?1分でわかりやすく解説

Database

WAL(Write-Ahead Logging)プロトコルは、データベースにおけるトランザクションの安全性と整合性を保つための手法です。

参考 トランザクションとは

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

このページではWALプロトコルの基本的な動作・必要性について初心者向けにわかりやすく解説します。

このページで学べる内容
  • WAL(Write-Ahead Logging)プロトコルとは
    • WALプロトコルの必要性
    • WALプロトコルの基本的な動作

プログラマーやシステムエンジニアを目指す方であれば、知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。

スポンサーリンク

WALプロトコル(ログ先行書き込み)とは?

WAL(Write-Ahead Logging)プロトコルは、コンピュータがデータを保存する際に、まずその操作を別の場所(ログ)に記録してから実際にデータを更新する方法です。

こうすることで、何か問題が起きたときに、元のデータに戻せる安全策を持つことができるということ。ログさえあれば、後からどうにでも復旧できる!という考え方から編み出されたプロトコルです。

コンピュータやソフトウェアは、予期せぬトラブル(電源が突然切れる、プログラムのエラーなど)が発生することがあります。このようなトラブルが起きたとき、データベースが壊れると大変なことになりますよね。WALプロトコルは、そういった「困った状況」に備えるための安全装置と言えます。

WALプロトコルの基本的な動作

WALプロトコルは、まず「ログ」に何をするか書き留めてから、実際にデータベースを変更します。もし何か問題が発生したら、このログを使ってデータベースを元に戻します。

 日常生活でWALプロトコルを例えてみる・・・

  1. ログに記録する(予告): まず、「太郎さんの財布に1万円追加する」という操作をログに書き込みます。
  2. 実際に操作する: 次に、太郎さんの財布に実際に1万円追加します。

この2ステップがうまくいけば、すべて完了です。

でも、以下のような障害が発生してしまうとどうでしょうか?

  • 電源が突然切れた場合
  • ソフトウェアがクラッシュした場合

このような場合には、ログを確認して、「太郎さんの財布に1万円追加する」操作がちゃんと完了したかどうかを調べます。もし完了していれば、何も問題ありませんが、完了していなければ、ログに書かれた通りに再度操作をします。

このように、WALプロトコルは「事前に予告」してから「実行」することで、何か問題が発生したときにも安全にデータを扱うことができます。

データベーススペシャリスト平成21年春期 午前Ⅱ 問11(筆者微修正)

更新前情報と更新後情報をログとして利用するDBMSにおいて,ログを先に書き出すWAL(Write Ahead Log)プロトコルに従うとして,処理①~⑥を正しい順番に並べよ。

  1. begin transactionレコードの書出し
  2. データベースの実更新
  3. ログに更新前レコードの書出し
  4. ログに更新後レコードの書出し
  5. commitレコードの書出し
  6. end transactionレコードの書出し

①→③→④→②→⑤→⑥

解説

  1. ①begin transactionレコードの書出し: トランザクションが開始されたことをログに書き出します。これがトランザクションのスタート地点となります。
  2. ③ログに更新前レコードの書出し: 更新する前のデータ(更新前情報)をログに書き出します。これにより、何らかの問題が発生した場合に、元の状態に戻すための情報が確保されます。
  3. ④ログに更新後レコードの書出し: 更新した後のデータ(更新後情報)もログに書き出します。この情報を用いて、トランザクションが正常に完了したかどうかを後で確認できます。
  4. ②データベースの実更新: このステップで初めて、データベースに対して実際の更新が行われます。
  5. ⑤commitレコードの書出し: 更新が成功した場合、その事実をログに書き出します(commit)。これにより、このトランザクションが正常に完了したという証となります。
  6. ⑥end transactionレコードの書出し: トランザクションが終了したことを明示的にログに書き出します。

以上の手順により、WALプロトコルはデータベースの整合性を保ちつつ、障害が発生した場合のリカバリー(復旧)も可能にしています。

参考 begin transaction

DBMSごとのWALプロトコルの実装例

WALプロトコルの基本的な意味と動作を理解したところで、実際に各DBMSごとのWALプロトコルの実装例を簡単に記載しておきます。

参考 DBMS(データベース管理システム)とは?

DBMS実装名ログファイルその他の特徴
PostgreSQLWAL (Write-Ahead Logging)WALセグメントレプリケーション、PITR対応
MySQL (InnoDB)Redo Logib_logfile0, ib_logfile1チェックポイントメカニズム
SQLiteWAL (Write-Ahead Logging)-wal 拡張子のWALファイルメモリ使用量を抑制
Microsoft SQL ServerトランザクションログN/ALSN(Log Sequence Number)を使用

WALプロトコルのまとめ

  • WAL(Write-Ahead Logging)はデータベースの更新プロトコル。
    • 操作を行う前に、その内容をログに書き込む。
  • 何らかの障害が発生した場合にログを用いてデータベースが復旧可能になる。
    • これにより、データの整合性と安全性が高まる。

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました