※追記(タイトルにRDSと書いたがPostgreSQL限定である)
RDSはデフォルトでパラメータをチューニングされているものの、本番でそれなりに使うにはチューニングが必要。 そこで最初にある程度チューニングしておくべき場所を記載していく。
AWSのパラメータについては下記を参考。
デッドロックの検査間隔
deadlock_timeout
はデフォルトは1000msになっている。
1秒はPostgreSQLのデフォルトなので短い。
10秒以上と書いているが弊社の場合は40秒にしている。
これは明確な基準値を持って決めてるわけでは無く、pg_stat_database.deadlocks
の値が今までずっと0なので強気に付けている。
checkpointの値
Google検索すると checkpoint_segments
を変更しようという記事が多く引っかかると思うがPostgreSQL10では廃止になった。
変更するのは checkpoint_timeout
と checkpoint_completion_target
の2つ。
checkpoint_timeout
はRDSは5分だが30分くらいに伸ばすのが一般的。
弊社は60分にしている。
checkpoint_completion_targetは (checkpoint_timeout-2分)/checkpoint_timeout
の値が良いとされる。
そのため弊社では 0.95
を設定している。
この2つの記事がとても良いのでcheckpointの調整についてはこれを見るのが良い。
場合によって調整する項目
必須ではないがレプリケーションのスタンバイのクエリが殺される場合などVACUUMが問題になっている場合はVACUUMの頻度を下げたり、逆に増やしたりする調整もあるだろう。
また hot_standby_feedback =1
を有効にし、スタンバイのクエリを殺させないようにするケースもある。
細かいパラメータについては 日本PostgreSQLユーザ会 関西支部長 のスライドを感謝しながら読もう。
とても参考になる。
PostgreSQL11 設定パラメーター解体新書 / PostgreSQL 11 parameter - Speaker Deck
その他
PostgreSQLをチューニングするための監視項目についてはこちらを参考にした上で、統計情報を見るのが良い。
追記
※2019/03/05 13:57 追記
こうやって知見の共有が繋がるのは嬉しいし、とても助かりますね!! 圧倒的感謝。