web-dev-qa-db-fra.com

Erreur AWS RDS PostgreSQL "les logements de connexion restants sont réservés aux connexions de superutilisateur sans réplication"

Dans le tableau de bord, je vois qu'il y a actuellement 22 connexions ouvertes à l'instance de base de données, bloquant les nouvelles connexions avec l'erreur suivante: 

les logements de connexion restants sont réservés aux connexions de superutilisateur sans réplication.

J'accède à la base de données à partir de l'API de service Web s'exécutant sur une instance EC2 et conserve toujours les meilleures pratiques en matière de:

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. Puis-je faire quelque chose d'autre dans le code?

  2. Devrais-je faire autre chose dans la gestion de la base de données?

  3. Existe-t-il un moyen de fermer périodiquement les connexions?

13
michael

Amazon doit définir le nombre de connexions en fonction du droit de chaque modèle d'exiger une certaine quantité de mémoire et de connexions.

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)

Mais si vous le souhaitez, vous pouvez modifier la taille de connexion maximale en personnalisant en: 

Depuis la console RDS> Groupes de paramètres> Modifier les paramètres,

Vous pouvez modifier la valeur du paramètre max_connections en une valeur personnalisée.

Pour fermer les connexions périodiquement, vous pouvez configurer un travail cron à peu près comme ceci.

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

vous pouvez modifier le nombre maximal de connexions dans le Parameters Group pour votre instance RDS. Essayez de l'augmenter ..__ Ou vous pouvez essayer de mettre à niveau votre instance, car le nombre maximal de connexions est défini sur {DBInstanceClassMemory/31457280}

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

3
lordgun

J'utilise Amazon RDS, SCALA, Postgresql & Slick. Tout d’abord, le nombre de connexions disponibles dans RDS dépend de la quantité de RAM _ - i.e. disponible, taille de l’instance RDS. Mieux vaut ne pas modifier le numéro de connexion par défaut _.

Vous pouvez vérifier le nombre maximal de connexions en exécutant l'instruction SQL suivante sur votre instance de base de données RDS:

show max_connections; 

Vérifiez votre configuration SPRING pour voir combien de threads que vous créez:

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
}

Toutes les connexions SONT effectuées lors de SRING BOOT initialisation, soyez donc prudent de ne pas dépasser la limite RDS. Cela inclut d'autres services qui se connectent à la base de données. Dans ce cas, le nombre de connexions sera supérieur à 90.

La limite actuelle de db.t2.small est 198 (4 Go de RAM).

 enter image description here