
- PostgreSQL
- EDB Postgres
【PostgreSQL/EPAS11 新機能】autoprewarmでPostgreSQL再起動後の性能劣化を予防しよう
PostgreSQL/EDB Postgres Advanced Server 11にて、PostgreSQL/EPAS停止前の共有バッファの内容を復元する autoprewarm機能が実装されました。
|
チェックポイントはディスクI/Oを伴う処理ですので、短い間隔で繰り返し実行されると性能劣化を引き起こす可能性があります。本記事では、PostgreSQL(9.5以降)でチェックポイントが多発しているかの確認と、多発していた場合の対処方法について説明します。
また、参考記事として、「【PostgreSQL9.5】max_wal_sizeとmin_wal_sizeの概要について
」もご覧いただけると理解が深まります。PostgreSQL9.5でチェックポイントの間隔を調整する際に使用するパラメータであるmax_wal_sizeとmin_wal_sizeの概要について解説しています。
チェックポイントは、以下の理由からI/O負荷の高い処理です。チェックポイントが多発することでPostgreSQLが動作するサーバ全体の性能に影響を及ぼす可能性があります。
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のチューニングが必要であると判断できます。
[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はデータベースクラスタ単位で設定するパラメータのため、任意のデータベースに接続して作業を行うとすべてのデータベースに設定が反映されます。
(OSのプロンプトから実行)
psql -U <PostgreSQLのスーパーユーザ> -d <任意のデータベース名>
$ psql -U testuser -d testdb
(psqlのプロンプトから実行)
ALTER SYSTEM SET max_wal_size='<設定値>';
testdb=# ALTER SYSTEM SET max_wal_size='1536MB';
(OSのプロンプトから実行)
pg_ctl reload
$ pg_ctl reload
なお、min_wal_sizeの設定は、チェックポイントの間隔に影響しないため変更する必要はありません。
PostgreSQL9.4以前のバージョンでチェックポイントが多発しているかを確認するには、PostgreSQLのログファイルに以下のメッセージが頻発していないかを確認します。以下のメッセージが頻発して出力されている場合は、以下のメッセージが頻発しなくなるまでcheckpoint_segmentsの値を増やしてください。
HINT: Consider increasing the configuration parameter "checkpoint_segments".
今回は、PostgreSQLのログファイルからチェックポイントが多発していないかを確認した上で、チェックポイント多発による性能劣化に対処する方法をご紹介しました。
皆さまの環境でも上述のHINTのメッセージが出力されていないかをぜひ確認してみてください。仮に、HINTのメッセージが頻発している場合には、今回紹介した方法でPostgreSQLの処理性能が大きく改善されるかもしれません。
![]() |
---|
サービス事業部 サポートセンター
2007年にアシストに入社して以来、ORACLE製品やPostgreSQL・EDB Postgres製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能に関する検証結果などを紹介します。
■商標に関して
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
PostgreSQL/EDB Postgres Advanced Server 11にて、PostgreSQL/EPAS停止前の共有バッファの内容を復元する autoprewarm機能が実装されました。
pg_basebackupにチェックサムの検証機能が付きました。