【わる】

WAL(Write-Ahead Log) とは?

最終更新:
💡 本体を保存する前に、復旧用の記録を残す

データベースの変更を、データファイルへ永続化する前にログへ永続化しておく仕組み。障害復旧に使われますが、データやログを失う事故へのバックアップは別に必要です。

📌 このページのポイント
WAL:ログを先に永続化する① 変更の記録を保存WALログ対応する変更データ本体② その後、本体へ保存⚠ 本体の保存途中でクラッシュ残ったログで未反映分を復旧ログと本体を失う事故には、別途バックアップが必要
本体とは永続化するデータファイルのことです。メモリ上の変更より先、という意味ではありません。
ひよこ ひよこ
WALは普通の操作ログと何が違うの?
ペンギン先生 ペンギン先生
データの変更を復旧するためのログで、保存の順番に大事なルールがあるんだ。本体のデータファイルを永続的な保存先へ書く前に、対応する変更ログを先に永続化するよ。単なるアクセス履歴とは違うんだ。
ひよこ ひよこ
先に記録すると、何が助かるの?
ペンギン先生 ペンギン先生
本体への反映途中にクラッシュしても、残ったログから未反映の変更をやり直せる。PostgreSQLではREDOと呼ぶ復旧に使うよ。ただしデータとログの保存先まで失ったら、ログだけで必ず戻せるわけではないんだ。
ひよこ ひよこ
ログと本体の両方に書くと、遅くならない?
ペンギン先生 ペンギン先生
ログは順番に書き、本体の変更をまとめて保存できるので、効率がよくなる場合があるよ。ただし性能や確定済みの変更をどこまで守れるかは、データベースの方式や保存設定、装置にもよる。無条件に速くなる仕組みではないね。
ひよこ ひよこ
ログはたまり続けるの?
ペンギン先生 ペンギン先生
チェックポイントで本体側の保存を進め、不要になったログを再利用・削除するなどの管理をするよ。PostgreSQLのmax_wal_sizeは目安となるソフト上限で、必ず守られる容量の上限ではない。ログを残す設定や負荷も確認しよう。
ひよこ ひよこ
WALがあればバックアップはいらない?
ペンギン先生 ペンギン先生
別に必要だよ。たとえばPostgreSQLの時点復旧では、元になるバックアップと必要なWALを組み合わせる。SQLiteにもWALモードがあるけれど、通常の既定方式とは別。データベースごとの運用手順を確認して使うんだ。
もっと詳しく知りたい人へ

SQLiteのWALモードでは、読み取りと書き込みがどう変わる?

変更をWALへ追記することで、読み取りと書き込みを並行して進めやすくなります。ただし同時に書き込める書き手は1つで、ロック競合がなくなるわけではありません。通常のWALモードは共有メモリを使うため、ネットワークファイルシステムでの運用にも制約があります。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「WAL」って出てきたら「データ本体より先に保存する、復旧用の変更ログ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Write-Ahead Log」 = 先行書き込みログ
💬 Write-Ahead(先に書く)Log(ログ)で、本体より先にログに書くという意味だよ

参考資料

← 用語集にもどる