web-dev-qa-db-ja.com

AWS RDS PostgreSQLエラー「残りの接続スロットは、レプリケーション以外のスーパーユーザー接続用に予約されています」

ダッシュボードには、現在DBインスタンスへの22のオープン接続があり、エラーで新しい接続をブロックしています:

残りの接続スロットは、レプリケーション以外のスーパーユーザー接続用に予約されています。

EC2インスタンスで実行されているWebサービスAPIからDBにアクセスし、常に次のベストプラクティスを維持します。

Connection connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
Class.forName(DB_CLASS);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL_Query_String);
...
resultSet.close();
statement.close();
connection.close();
  1. コードで他に何かできますか?

  2. DB管理で何か他のことをすべきですか?

  3. 定期的に接続を閉じる方法はありますか?

16
michael

Amazonは、特定の量のメモリと接続を要求する各モデルの権利に基づいて、接続数を設定する必要があります

MODEL      max_connections innodb_buffer_pool_size
---------  --------------- -----------------------
t1.micro   34                326107136 (  311M)
m1-small   125              1179648000 ( 1125M,  1.097G)
m1-large   623              5882511360 ( 5610M,  5.479G)
m1-xlarge  1263            11922309120 (11370M, 11.103G)
m2-xlarge  1441            13605273600 (12975M, 12.671G)
m2-2xlarge 2900            27367833600 (26100M, 25.488G)
m2-4xlarge 5816            54892953600 (52350M, 51.123G)

ただし、必要に応じて、最大接続サイズをカスタム値に変更できます

RDSコンソール>パラメーターグループ>パラメーターの編集から、

Max_connectionsパラメーターの値をカスタム値に変更できます。

接続を定期的に閉じるには、cronジョブを次のように設定できます。

select pg_terminate_backend(procpid)
from pg_stat_activity
where usename = 'yourusername'
 and current_query = '<IDLE>'
 and query_start < current_timestamp - interval '5 minutes';
19
error2007s

rDSインスタンスのParameters Groupの最大接続数を変更できます。増やしてみてください。または、最大接続が{DBInstanceClassMemory/31457280}に設定されているため、インスタンスのアップグレードを試みることができます

http://docs.aws.Amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

4
Cédric Nilly

Amazon RDS、SCALA、Postgresql&Slickを使用しています。まず第一に-RDSで利用可能な接続の数は利用可能な量に依存します[〜#〜] ram [〜#〜]-すなわちRDSインスタンスのサイズ。 デフォルトの接続番号を変更しないが最適です。

RDS DBインスタンスで次のSQLステートメントを実行することにより、最大接続数を確認できます。

show max_connections; 

SPRING構成を確認してスレッド数生成しています:

database {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  properties = {
    url = "jdbc:postgresql://test.cb1111.us-east-2.rds.amazonaws.com:6666/dbtest"
    user = "youruser"
    password = "yourpass"
  }
  numThreads = 90
}

すべての接続作成済みブート時初期化 RDS制限を超えないように注意してください。これには、DBに接続する他のサービスが含まれます。この場合、接続の数は90以上になります。

Db.t2.smallの現在の制限は198(4GBのRAM)です

enter image description here