【わる】
WAL(Write-Ahead Log) とは?
💡 本番に書く前に、まずメモに書いておく安心設計
📌 このページのポイント
- データを変更する前に必ずログファイルに「何を変更するか」を先に書き込む
- 障害が発生しても、ログを再生(リプレイ)すればデータを復旧できる
- ディスクへの書き込み回数を減らして性能を向上させる効果もある
- PostgreSQL、SQLite、MySQLなど多くのデータベースで採用されている基盤技術
WALって何?データベースのログのこと?
ログの一種だけど、特別なルールがあるんだ。「データベース本体を書き換える前に、必ず先にログファイルに変更内容を記録する」というルールだよ。これが Write-Ahead(先に書く)の意味だね
なんで先にログに書く必要があるの?
なるほど!でも毎回ログに書いてから本体にも書くって、二度手間で遅くならないの?
実は逆で速くなることが多いんだ。ログは追記(末尾に書き足す)だけだからディスクの動きが少なくて高速なんだよ。本体へのランダムな書き込みは後でまとめてやれるから、全体としては効率が良くなるよ
ログがどんどん溜まっていかないの?
定期的に「チェックポイント」という処理で、ログの内容を本体に反映済みにして古いログを削除するよ。PostgreSQLだとwal_sizeで上限を設定できるし、レプリケーションでWALを別サーバーに転送して待機系を作る使い方もあるんだ
WALってどのデータベースでも使ってるの?
まとめ:ざっくりこれだけ覚えればOK!
「WAL」って出てきたら「本番に書く前にまずログに記録しておく安全装置」と思えばだいたいOK!
📖 おまけ:英語の意味
「Write-Ahead Log」 = 先行書き込みログ
💬 Write-Ahead(先に書く)Log(ログ)で、本体より先にログに書くという意味だよ