【わる】
WAL(Write-Ahead Log) とは?
最終更新:
💡 本体を保存する前に、復旧用の記録を残す
データベースの変更を、データファイルへ永続化する前にログへ永続化しておく仕組み。障害復旧に使われますが、データやログを失う事故へのバックアップは別に必要です。
📌 このページのポイント
- データファイルの保存より先に変更のログを永続化する
- ログを使って未反映の変更を復旧できる
- 本体の書き込みをまとめ、効率を改善できる場合がある
- チェックポイント・保存設定・バックアップも重要
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(ログ)で、本体より先にログに書くという意味だよ