WAL(先行書き込みログ)
Write-Ahead Logging。データファイルへ反映する「前」に、変更を順次書き込みのログへ記録する方式。永続性(ACIDのD)を保証し、クラッシュ後はログを再生してコミット済みトランザクションを復元する。レプリケーションとポイントインタイムリカバリの基盤でもある。
原理は、順次のログ書き込みがデータファイルへのランダム書き込みよりずっと速いことにある。真実はログにあり、データファイルはチェックポイントの時に遅延して更新される。クラッシュ時は直近のチェックポイントからREDOする。PostgreSQLのWALは、ストリーミングレプリケーション(WALをレプリカへ送る)、論理レプリケーション(WALを行の変更へデコードする)、PITR(WALのアーカイブとベースバックアップ)も支える。この用語は汎用的で、MySQL/InnoDBでは「redoログ」、SQLiteにはWALモードがある。運用上の落とし穴はWALの肥大化で、レプリカやレプリケーションスロットが止まるとWALが溜まり続けてディスクを埋めてしまう、よくある障害だ。