PostgreSQL 9.5へのメジャーバージョンアップグレードを実施する場合、checkpoint_segmentsが廃止され
max_wal_sizeでcheckpointのチューニングを行うかと思います。
https://www.postgresql.jp/document/9.6/html/release-9-5.html
設定パラメータcheckpoint_segmentsをmin_wal_sizeとmax_wal_sizeで置き換えました。 (Heikki Linnakangas)
これまでcheckpoint_segmentsを調整していたのであれば、以下の式でおおよそ同等の設定が得られます。
max_wal_size = (3 * checkpoint_segments) * 16MB
max_wal_sizeのデフォルト設定は、以前のcheckpoint_segmentsのデフォルト値よりもずっと大きいことに注意してください。そのため、これらを調整することはもはや不要になるかもしれません。
例えば9.4でcheckpoint_segments=64としていたとします。
その場合、上述の計算式に当てはめると以下の通りです。
( 3 * 64 ) * 16 = 3072MB
こちらの計算式の根拠が理解できておりません。
まずわからないところがあり、9.5以前のcheckpoint_segmentsパラメータの場合
WALログサイズの最大サイズの求め方です。(アーカイブログを除く)
こちらにはこのようにあります。
https://www.postgresql.jp/document/9.2/html/wal-configuration.html
WALセグメントファイルは常に少なくとも1つあり、また、通常は(2 + checkpoint_completion_target) * checkpoint_segments + 1、もしくはcheckpoint_segments + wal_keep_segments + 1より多くはありません。
結構古いですがこちらでは
https://thinkit.co.jp/cert/tech/10/5/2.htm
トランザクションログのために必要なハードディスク容量を式にまとめると下記の通りです。
(チェックポイントセグメント数×2+1)×16Mバイト
こちらのPDFの21ページ目には
https://oss-db.jp/news/event/image/20140920_01.pdf
トランザクションログ(WAL)の容量を見積もる
→16MB × (checkpoint_segments × 3 + 1)
どれも「WALログサイズの最大サイズの求め方」について話していると思うのですが
だとしたら式がこれだけ違うわけがないのですが、どれが自分の知りたいものなのかわからなくなってきました。
また、この根拠がわかった上で、なぜ9.5のmax_wal_sizeの計算式が
max_wal_size = (3 * checkpoint_segments) * 16MB
となるのかも、よくわかりません。
バージョンアップではとりあえず公式ドキュメントの通りで
この計算式に当てはめればよいかと思っていたのですが
原理が理解できておらず不安です。
どなたかお助け下さい。よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。