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();
Puis-je faire quelque chose d'autre dans le code?
Devrais-je faire autre chose dans la gestion de la base de données?
Existe-t-il un moyen de fermer périodiquement les connexions?
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';
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
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).