Database Support Blog

  • 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つのパラメータの設定値を調整する方法などはまた別の機会にご紹介します。



■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • EDB
  • PostgreSQL
2024.01.16

EDBがもたらすデータベースの新たな価値 ~ EDB社Field CTO Ajit Gadge氏来日、セミナー講演レポート ~

EDB社のAjit Gadge氏を招き「PostgreSQLユーザーに捧ぐ、EDBを使ったDB機能向上とコスト削減の両立」セミナーを開催しました。DB市場の現状やトレンド、EDBの最新動向について紹介しております。アシストセッションのアーカイブ配信の視聴申し込みも可能です。ぜひご覧ください。

  • PostgreSQL
  • EDB
2023.12.20

PostgreSQLのSQLチューニングを体験してみよう!

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載最終回となる9回目の記事では、「PostgreSQL SQLチューニング実践」のワークショップ主管である 田中 健一朗 にインタビューしました。

  • PostgreSQL
  • EDB
2023.10.30

データベースの健康診断! ~ PostgreSQL DB稼働分析体験 ~

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載8回目となる今回の記事では、PostgreSQL DB稼働分析ワークショップの主管である保田 公貴にインタービューしました。

ページの先頭へ戻る