Database Support Blog

  • PostgreSQL
2016.10.04

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

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

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

また、参考記事として、「【PostgreSQL9.5】max_wal_sizeとmin_wal_sizeの概要について 」もご覧いただけると理解が深まります。PostgreSQL9.5でチェックポイントの間隔を調整する際に使用するパラメータであるmax_wal_sizeとmin_wal_sizeの概要について解説しています。

なぜチェックポイントが多発すると性能が劣化するのか?

チェックポイントは、以下の理由からI/O負荷の高い処理です。チェックポイントが多発することでPostgreSQLが動作するサーバ全体の性能に影響を及ぼす可能性があります。

  • チェックポイント時点の全てのダーティバッファをデータページに書き出す必要があるため
  • チェックポイント直後のWALファイルへの書き込み量が増えるため
  • データページの一貫性を保証するために、各チェックポイント後の最初に変更されるデータページは、そのページ全体の内容がWALファイルに記録されます。

チェックポイントが多発しているかの確認方法

PostgreSQLのログファイルから、max_wal_sizeの値を増やすことを促すメッセージの有無を確認します。以下のメッセージが頻出している場合は、チェックポイントの間隔が短すぎます。

HINT: Consider increasing the configuration parameter "max_wal_size".


ログファイルからこのメッセージを確認できない場合、または、稀にしか確認できない場合は、max_wal_sizeのチューニングは不要です。

このメッセージは、前回チェックポイントからパラメータ checkpoint_warning (デフォルト30秒) に指定された秒数以内に再度チェックポイントが行われた場合に記録されます。checkpoint_warningにデフォルト値の30を設定している場合、以下の例では出力が頻発しているため、max_wal_sizeのチューニングが必要であると判断できます。

PostgreSQLのログファイルに当該メッセージが連続して出力されている例

[2016-08-09 10:54:25 JST] 19288[141]LOG: checkpoints are occurring too frequently (27 seconds apart)
[2016-08-09 10:54:25 JST] 19288[142]HINT: Consider increasing the configuration parameter "max_wal_size".
〜中略〜
[2016-08-09 10:54:53 JST] 19288[145]LOG: checkpoints are occurring too frequently (28 seconds apart)
[2016-08-09 10:54:53 JST] 19288[146]HINT: Consider increasing the configuration parameter "max_wal_size".
〜中略〜
[2016-08-09 10:55:21 JST] 19288[149]LOG: checkpoints are occurring too frequently (27 seconds apart)
[2016-08-09 10:55:21 JST] 19288[150]HINT: Consider increasing the configuration parameter "max_wal_size".


チェックポイントが多発していた場合の対処方法

チェックポイントが多発していた場合には、PostgreSQLのログファイルに当該メッセージが頻発しなくなるまで、以下の手順でwal_max_sizeの値を増やします。デフォルトは1GBに設定されています。max_wal_sizeはデータベースクラスタ単位で設定するパラメータのため、任意のデータベースに接続して作業を行うとすべてのデータベースに設定が反映されます。

1) PostgreSQLのスーパーユーザで任意のデータベースに接続

 (OSのプロンプトから実行)
  psql -U <PostgreSQLのスーパーユーザ> -d <任意のデータベース名>

Linux環境でtestuserスーパーユーザでtestdbデータベースに接続する例

 $ psql -U testuser -d testdb


2) max_wal_sizeの設定値変更

 (psqlのプロンプトから実行)
  ALTER SYSTEM SET max_wal_size='<設定値>';

max_wal_sizeを1.5GBに設定する例

 testdb=# ALTER SYSTEM SET max_wal_size='1536MB';


3) PostgreSQLのリロード

 (OSのプロンプトから実行)
  pg_ctl reload

Linux環境でPostgreSQLのリロードを実行する例

 $ pg_ctl reload


なお、min_wal_sizeの設定は、チェックポイントの間隔に影響しないため変更する必要はありません。

補足:PostgreSQL9.4以前のバージョンでチェックポイントが多発しているかを確認する方法

PostgreSQL9.4以前のバージョンでチェックポイントが多発しているかを確認するには、PostgreSQLのログファイルに以下のメッセージが頻発していないかを確認します。以下のメッセージが頻発して出力されている場合は、以下のメッセージが頻発しなくなるまでcheckpoint_segmentsの値を増やしてください。

HINT: Consider increasing the configuration parameter "checkpoint_segments".


まとめ

今回は、PostgreSQLのログファイルからチェックポイントが多発していないかを確認した上で、チェックポイント多発による性能劣化に対処する方法をご紹介しました。

皆さまの環境でも上述のHINTのメッセージが出力されていないかをぜひ確認してみてください。仮に、HINTのメッセージが頻発している場合には、今回紹介した方法でPostgreSQLの処理性能が大きく改善されるかもしれません。


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

■商標に関して
 ・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稼働分析ワークショップの主管である保田 公貴にインタービューしました。

ページの先頭へ戻る