PostgreSQLのcheckpoint_completion_targetについてメモ
PostgreSQLのcheckpoint_completion_target
についてメモ。
19.5. ログ先行書き込み(WAL) https://www.postgresql.jp/document/10/html/runtime-config-wal.html#GUC-CHECKPOINT-TIMEOUT
checkpoint_completion_target
チェックポイントの完了目標をチェックポイント間の総時間の割合として指定します。 デフォルトは0.5です。 このパラメータはpostgresql.confファイル、または、サーバのコマンドラインでのみ設定可能です。
postgres=# show checkpoint_completion_target;
checkpoint_completion_target
------------------------------
0.5
(1 row)
一方、checkpoint_timeout
というパラメータがありデフォルトでは5分が設定されている。自動的WALチェックポイント間の最大間隔を秒単位で指定できるパラメータである。
このcheckpoint_completion_targetはcheckpoint_timeoutで設定された"割合"の時間を使ってcheckpointをしていくという動きをして負荷を分散する。あくまで目安程度となるらしい。
postgres=# show checkpoint_timeout;
checkpoint_timeout
--------------------
5min
(1 row)
デフォルトの通り、checkpoint_timeout
が5分でcheckpoint_completion_target
が0.5の場合は約2.5分(あくまで目安)掛けてダーティーページをディスクに書き込んでいくという処理となる。
つまり、checkpoint_completion_targetを低くした場合はcheckpointでダーティーページをディクスに書き込む際の負荷が高くなることが予想され、checkpoint_completion_targetを高くした場合(=時間を掛ける)は、クラッシュリカバリ時に処理をするWALファイルが増える。
更新が多くcheckpointの負荷が気になる場合はcheckpoint_completion_targetをデフォルトの0.5から「0.6~0.9」に引き上げることを考慮。
関連しているかもしれない記事
- PostgreSQLの実行中のSQLをキャンセルする
- シグナル(TERM/INT/HUP)によるPostgresプロセスへの影響
- PostgreSQLの監視のためのログ設定について
- Aurora(PostgreSQL互換)で使用可能な拡張機能一覧
- PostgreSQLのoid2nameの使用方法