はじめに
性能試験でDBコネクションの枯渇が発生したため、コネクションのMax値のチューニングを実施しました。
その際に、AWSのAmazon Aurora PostgreSQL Serverlessクラスターに紐づくDBパラメータグループに設定されているmax_connectionsの値を変更しました。
しかし、実機に値が反映されない事象が発生したため、その際に分かった仕様について以下にまとめております。
環境と調査結果
- 背景:Aurora PostgreSQL Serverlessのコネクション数のMax値を性能検証のため変更したいという要望がありました
- 環境:夜間帯はコスト削減のためAurora PostgreSQL Serverlessの最小ACUを0としている環境になります
※ACU(Aurora Capacity Unit)はAuroraの容量単位を指します - 運用:性能試験の際は最小最大ACUともに1以上の値に変更しております
調査の結果、Aurora PostgreSQL Serverlessには以下の制約があることがわかりました。
最小ACUを0~0.5にした時点でmax_connectionsは"2000"が上限となります
対応策と注意事項
max_connectionsを"2000"より大きな値に変更したい場合、以下の対応が必要です。
- 最小ACUを1以上に設定
- 最小ACUを変更後、インスタンスの再起動を実施
性能試験の際に実施したmax_connections適用手順
※前提max_connectionsのパラメータにはすでに"2000"より大きな値が設定されている
-
Aurora PostgreSQL Serverlessを起動する(最小ACUは0)
→この時のmax_connectionsは制約により"2000"より大きな値は設定できない -
Aurora PostgreSQL Serverlessの最小ACUを1以上に変更する
-
Aurora PostgreSQL Serverlessを再起動する
→ここでmax_connectionsのパラメータに設定している"2000"より大きい値が設定される
参考
AWSのAurora PostgreSQL Serverlessのデフォルト設定ではmax_connectionsには以下の数式が設定されています。
LEAST({DBInstanceClassMemory/9531392},5000)
数式でmax_connectionの値を指定している場合は、最大ACUを変更する際に再起動することで最適なmax_connectionsの値が適用されます。
まとめ
- 最小ACUを0~0.5にした時点でmax_connectionsは"2000"が上限となります
- 最小ACUを0~0.5から1以上に変更する際、"2000"より大きなmax_connectionsの値を適用するには再起動が必要となります
Amazon Aurora Serverlessの利用機会は日に日に増えていくと思いますので、 この内容が開発の一助となれば幸いです。

