Im Dashboard, das ich sehe, gibt es derzeit 22 offene Verbindungen zur DB-Instanz, die neue Verbindungen mit dem Fehler blockieren:
die verbleibenden Verbindungssteckplätze sind für Nicht-Replikations-Superuser-Verbindungen reserviert.
Ich greife auf die Datenbank von der Web-Service-API zu, die auf der EC2-Instanz ausgeführt wird, und halte mich immer an die bewährten Methoden:
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();
Kann ich etwas anderes im Code tun?
Sollte ich noch etwas in der DB-Verwaltung tun?
Gibt es eine Möglichkeit, Verbindungen periodisch zu schließen?
Amazon muss die Anzahl der Verbindungen basierend auf dem Recht jedes Modells festlegen, um eine bestimmte Menge an Speicher und Verbindungen zu fordern
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)
Wenn Sie möchten, können Sie jedoch die maximale Verbindungsgröße in benutzerdefiniert ändern
Über RDS Console> Parametergruppen> Parameter bearbeiten
Sie können den Wert des Parameters max_connections in einen benutzerdefinierten Wert ändern.
Um die Verbindungen regelmäßig zu schließen, können Sie einen Cron-Job wie folgt einrichten.
select pg_terminate_backend(procpid)
from pg_stat_activity
where usename = 'yourusername'
and current_query = '<IDLE>'
and query_start < current_timestamp - interval '5 minutes';
sie können die maximalen Verbindungen im Parameters Group
für Ihre RDS-Instanz ändern. Versuchen Sie, es zu erhöhen. Sie können auch versuchen, Ihre Instanz zu aktualisieren, da die max-Anzahl der Verbindungen auf {DBInstanceClassMemory/31457280}
gesetzt ist.
http://docs.aws.Amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
Ich verwende Amazon RDS, SCALA, Postgresql & Slick. Zunächst hängt die Anzahl der verfügbaren Verbindungen in RDS von der Menge der verfügbaren RAM - d. H. Der Größe der RDS-Instanz ab. Es ist am besten die Standardverbindungsnummer nicht zu ändern.
Sie können die maximale Verbindungsnummer überprüfen, indem Sie die folgende SQL-Anweisung in Ihrer RDS DB-Instanz ausführen:
show max_connections;
Überprüfen Sie Ihre SPRING-Konfiguration, um wie viele Threads Sie anzuzeigen:
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
}
Alle Verbindungen ARE werden hergestellt bei SRING BOOT Initialisierung, achten Sie also darauf, das RDS-Limit nicht zu überschreiten. Dies schließt andere Dienste ein, die eine Verbindung zur DB herstellen. In diesem Fall beträgt die Anzahl der Verbindungen 90+.
Die aktuelle Grenze für db.t2.small ist 198 (4 GB RAM).