はじめに
PostgreSQLの設計を行うときの、WALファイル(トランザクションログ)の見積もり方法についてまとめました。
WALファイル(トランザクションログ)
PostgreSQL 9.5 より、WALファイルの設定パラメータ「checkpoint_segments」が、「min_wal_size」と「max_wal_size」に置き換えられた。
「max_wal_size」は、チェックポイントの間にWALが増加する最大サイズであり、 デフォルト値は1GB(WALファイル64個分)になる。
この設定値が小さい場合は障害発生時のリカバリ時間が短くなるが、チェックポイントが頻繁に行われることで性能に影響する。
また設定値を大きくすることで性能への影響を考慮できるが、ディスク容量の増大や障害発生時のリカバリに必要な時間が長くなる。
よって、性能への影響を考慮する場合は、大きいデータ更新などのトランザクション発生時に「max_wal_size」が満たせるように設計する。
例
例として以下に示す計算式で見積もる。
(※)WAL領域の枯渇はトランザクションの停止に繋がるため、少し多めを考慮したほうがいいと考える。
データ更新件数:100件/日
トランザクション量:10MB/回
見積りサイズ = 100 * 10 * 安全率
→安全率を1.5とすると約1.5GBになるので、切り上げて2GBとする。
アーカイブログ
アーカイブログはポイントインタイムリカバリ(PITR)時に必要となるファイルで、アーカイブモード有効時に出力される。運用としてデータベースのフルバックアップを週に一回で行い、かつ、差分バックアップとしてアーカイブログを日時でバックアップするときの見積もりについて考える。
アーカイブログは、以前にバックアップした時点から現在までのトランザクションログのアーカイブである。また、バックアップの期間と更新トランザクションの内容によって変動する。そのため、バックアップの期間が長いほど、更新トランザクションが多いほど、アーカイブログの容量は増加する。よって、アーカイブファイルはWALファイルと同一のものになるので、以下に示す計算式で見積もる。
例
例として上記WALファイルの見積もりを基に以下に示す計算式で見積もる。
WALファイルサイズ:2GB
バックアップの世代数:7
見積りサイズ = 2 * 7 * 安全率
→同じく安全率を1.5とした場合、21GBになる。