Database Support Blog

Database Support Blog>【PostgreSQL 9.5】max_wal_sizeとmin_wal_sizeの概要

  • PostgreSQL
2016.06.03

【PostgreSQL 9.5】max_wal_sizeとmin_wal_sizeの概要

【PostgreSQL 9.5】max_wal_sizeとmin_wal_sizeの概要

PostgreSQL 9.5(以下、9.5)では、チェックポイントの間隔を制御していたパラメータの1つである checkpoint_segments が廃止され、 max_wal_size min_wal_size に置き替えられました。

そこで、本記事ではmax_wal_sizeとmin_wal_sizeの概要と、checkpoint_segmentsがこれら2つのパラメータに置き替えられたことによるメリットについてご紹介します。


チェックポイントとは

チェックポイントとは、DML処理で更新された共有バッファ上の全ページ(全ダーティページ)をディスクに書き込む処理のことです。チェックポイントにより、共有バッファ上の変更がデータファイルに反映されたことが保証されます。また、共有バッファ上の変更がデータファイルに書きこまれることによって、不要になったWALファイルの再利用/削除も行っています。


チェックポイントが発生するタイミング

チェックポイントが発生するタイミングは以下の通りです。

  • 前回チェックポイントから checkpoint_timeout に指定した時間が経過した時(デフォルトは5分)
  • 【9.4まで】checkpoint_segmentsの数 × WALファイル(16MB) 分の変更履歴がWALファイルに書かれた時(デフォルトは48MB
  • 【9.5の場合】max_wal_sizeに指定したサイズ分の変更履歴がWALファイルに書かれた時(デフォルトは1GB
  • 手動でCHECKPOINTを実行した時
  • データベースクラスタをsmartモードかfastモードで停止した時
  • pg_start_backup関数を実行した時

9.4までのcheckpoint_segments(単位:WALファイル数)が、9.5ではmax_wal_size(単位:サイズ)に替わっています。また、チェックポイントが発生するまでのWALファイルの更新量が、9.4以前から9.5以降で48MBから1GBへと大幅に増加されています。


max_wal_sizeとmin_wal_sizeの概要

max_wal_size

max_wal_sizeは、チェックポイントの間隔とpg_xlog配下に保持するWALファイルの合計サイズの上限を制御するパラメータです。指定したサイズ分の変更履歴がWALファイルに書かれた時にチェックポイントが行われます。デフォルト値は1GB(WALファイル64個分)に設定されています。その他、WALファイルを再利用/削除する際の計算式にも使われています。


min_wal_size

min_wal_sizeは、pg_xlog配下に保持するWALファイルの合計サイズの下限を制御するパラメータです。デフォルト値は80MB(WALファイル5個分)に設定されています。また、WALファイルを再利用/削除する際の計算式にも使われています。


PostgreSQL 9.5でcheckpoint_segmentsが2つのパラメータに置き替えられたことによるメリット

簡単に言うと、チェックポイント毎の更新量に応じて、不要なWALファイルの再利用/削除をより適切に行えるようになりました。

9.4までのcheckpoint_segmentsでは、チェックポイントの間隔とチェックポイント実行時にWALファイルをどの程度再利用/削除するかの両方を制御していました。また、(checkpoint_segments×2+1)×16MB がpg_xlog配下に保持されるWALファイルの合計サイズの下限値を決定する計算式でした。チェックポイントが多発することによるI/O負荷増加の対策としてcheckpoint_segmentsに大きな値を設定すると、チェックポイント毎の更新量に関わらず巨大なディスク領域が常に必要となりました。

9.5では、チェックポイントの間隔とWALファイルの再利用/削除を2つのパラメータで制御できるようになりました。それが、max_wal_sizeとmin_wal_sizeです。チェックポイントの間隔は、max_wal_sizeで制御されます。WALファイルの再利用/削除は、max_wal_sizeとmin_wal_sizeの間の値とチェックポイント毎の更新量を元に運用状況に応じて動的に決定されます。チェックポイントが多発することによるI/O負荷増加の対策としてmax_wal_sizeを大きくしても、9.4までのように不要なWALファイルで巨大なディスク領域が常に必要になることはなくなりました。


checkpoint_segmentsの廃止に伴う注意点

9.5へのバージョンアップ時などで、9.4以前のpostgresql.confを使い回す場合は、checkpoint_segmentsの削除およびmax_wal_size/min_wal_sizeの設定を追加するように注意してください。9.5で、9.4以前のpostgresql.confを変更せずに使用してPostgreSQLを起動した場合、下記エラーを伴い起動に失敗します。

[p951@~]$ pg_ctl start
server starting
[p951@~]$ LOG: unrecognized configuration parameter "checkpoint_segments" in file "/home/p951/posgrehome/data/postgresql.conf" line 201
FATAL: configuration file "/home/p951/posgrehome/data/postgresql.conf" contains errors


まとめ

今回は、max_wal_sizeとmin_wal_sizeの概要と、checkpoint_segmentsがこれら2つのパラメータに置き替えられたことによって、運用状況に応じてpg_xlog配下に保持するWALファイル数を適切に調整できるようになったことを紹介しました。これら2つのパラメータの設定値を調整する方法などはまた別の機会にご紹介します。


執筆者情報

家島 拓也

2007年にアシストに入社して以来、ORACLE製品やPostgreSQL・EDB Postgres製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能に関する検証結果などを提供します。

関連している記事

  • PostgreSQL
2016.12.01

【SR+HS環境の落とし穴】スタンバイが要求したWALが上書きされる障害の予防策

PostgreSQLのSR+HS環境でスタンバイが要求したWALが上書きされる障害の予防策を紹介します。

  • EDB Postgres
  • PostgreSQL
2016.11.11

【EDB Postgres/PostgreSQL】うるう秒(閏秒)の対応

EDB Postgres/PostgreSQLでのうるう秒(閏秒)の対応方法について解説します。2017年元旦にトラブルとならないよう、準備しましょう。

  • PostgreSQL
2016.10.04

性能劣化を引き起こすチェックポイント多発の確認・対処方法

チェックポイントはディスクI/Oを伴うため、短い間隔で繰り返し実行されると性能劣化の原因となります。PostgreSQL(9.5以降)でチェックポイント多発の確認と、多発していた場合の対処方法について説明します。

アシストサポートセンターのご紹介 Oracle Database研修

ページの先頭へ戻る