はじめに
PostgreSQLで出力するWALファイル(トランザクションログ)についてまとめました。
本記事は、WALファイルの仕組みについて全体像を理解することを目的に、図としておこしました。
これから、PostgreSQLを学習する方の参考になれば幸いです。
全体概要図
- PostgreSQLは最初に、マスタサーバのプロセスを起動します。マスタサーバのプロセスにより、WALライタ、チェックポインタ、ライタプロセスが起動されます。その他のプロセスも起動しますが、一部省略します。
- 図中のクライアントは、アプリケーションをさします。またクライアントの接続は、バックエンドプロセスとして、起動されます。なお、クライアントの認証はpg_hba.conf等で制御しますが、詳細については割愛します。
- データベースに対する変更は、まずは共有メモリのWALバッファにキャッシュされ、WALライタプロセスにより、WALファイルに出力されます。
追記
データベースソフトウェアの本質として、ディスクに書き込まれていない状態で障害が発生すると、リカバリにWALファイルが必要だということが、図にすることで改めて分かりました。
通常のデータベース更新は処理性能向上(※)のためメモリ上で行われ、チェックポイントというタイミングで一括してディスクに反映させている。このため、システム障害でメモリ上のデータが消失すると、直近のチェックポイント以降の更新内容が失われる。ただし、更新履歴はログファイルに残っているので、システム障害回復後にこれを参照して、データベースを回復できる。
(※)ディスクへの書き込みが頻繁に行われれば、ディスクI/Oの性能に影響が出るため