今回はAWSのRDSでPostgreSQLを使っている場合のmax_connectionsについて解説です。
RDSではパラメータグループで設定されている「max_connections」値があり、デフォルトでは下記のような計算式によって可変値が設定されるようになっています。
max_connections LEAST({DBInstanceClassMemory/9531392},5000) 6-8388607
DBInstanceClassMemoryはデータベースインスタンスのメモリサイズが適応されるので、インスタンスのタイプが構成のであればあるほどmax_connectionsの値は上がっていくことになる。
(※実際にはインスタンスタイプに記載されているメモリのサイズがそのままDBInstanceClassMemoryの値として適応されるわけではなく、RDSプロセスに割り当てられたメモリサイズを意味するということなので、記載されたサイズよりは若干少ない値になるそうです。)
計算式で求めた理論値と実際の値には多少乖離があるのでクエリで調べてみます。
max_connectionの現在値を確認するには下記のクエリを実行します。
SHOW max_connections;
db.t2.micro(1CPU, Memory 1GB)
db.t2.medium(2CPU, Memory 4GB)
db.m4.xlarge(4CPU, Memory 16GB)
計算式をもとに算出した理論値と実際の設定値は多少乖離があるようで基本は
理論値 > 実際の設定値
といった具合になっているようです。
max_connectionsのLEAST関数に設定されている「9531392」という数値はPostgreSQLのバージョン等によって異なるようなので、環境に合わせて設定する必要があるようです。
AWSドキュメント DB パラメータグループを使用する
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
Oracle データベースを Amazon RDS PostgreSQL または Amazon Aurora PostgreSQL に移行する上でのベスト プラクティス: PostgreSQL 環境のターゲット データベースに関する考慮事項