AWS RDS-Verbindungslimits

45

RDS-Server kommen mit maximal 40 Verbindungen, wie in der folgenden Dokumentation
Ich verwende Magento 1.9, und an einigen Punkten erreiche ich die maximale Anzahl, dann ist die Website außer Betrieb.
Haben Sie einen empfohlenen Weg, um dieses Problem zu lösen?

Nach meinem Verständnis, wenn ich 2 Web-Server-Verbindung zu einem RDS-Server haben .. dann sollte ich 2 RDS-Verbindungen haben, nicht mehr.

Alaa Badran
quelle
2
"Wenn ich 2 Webserver mit einem RDS-Server verbinde, sollte ich nach meinem Verständnis 2 RDS-Verbindungen haben, nicht mehr." Das ist ein falsches Verständnis. Es ist normalerweise 1 Verbindung pro Worker-Prozess oder Thread.
Michael - SQLBOT
Danke @ Michael-sqlbot .. Ja, ich habe das falsch verstanden, aber ich wollte sicher gehen. Aber warum, wenn wir 40 Verbindungen zu RDS haben, lehnt es eine andere Verbindung ab und ist nicht erreichbar, bis andere Verbindungen geschlossen werden?
Alaa Badran
Das ist beabsichtigt, aus dem max_connectionsParameter. Für die meisten Workloads sollte es möglich sein, sie sicher zu erhöhen, da es sich um einen sicher konservativen Standardwert handelt. Sie sollten jedoch die Ursache für diese Spitzen untersuchen.
Michael - Sqlbot

Antworten:

65

Die AWS RDS max_connections-Grenzvariable basiert auf dem Instanztyp, sodass Sie Ihr RDS aktualisieren oder mehr Replikate erstellen können.

Die RDS-Typen mit max_connections begrenzen Folgendes:

  • t2.micro 66
  • t2.small 150
  • m3.medium 296
  • t2.medium 312
  • m3.large 609
  • t2.large 648
  • m4.large 648
  • m3.xlarge 1237
  • r3.large 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • m3,2xlarge 2492
  • r3.xlarge 2540

Referenziert von max_connections bei AWS RDS MySQL Instance Sizes im Jahr 2015

Update 2017-07

{DBInstanceClassMemory/12582880}Wenn Sie t2.micro mit 512 MB RAM verwenden, ist die aktuelle RDS MySQL-Einstellung für max_connections standardmäßig auf (512 * 1024 * 1024) / 12582880 ~ = 40 usw. festgelegt.


Jeder Webserver kann viele Verbindungen zu RDS haben, was von Ihren SQL-Anforderungen vom Webserver abhängt.

Nick Tsai
quelle
Ich weiß das, aber wenn 40 Verbindungen erreicht werden, antwortet der Server nicht? Überprüfen Sie Folgendes
Alaa Badran
1
Ich überprüfe die RDS-Parametergruppen, die max_connections sind standardmäßig voreingestellt. {DBInstanceClassMemory/12582880}Wenn Sie also t2.micro mit 512 MB RAM verwenden, könnten die max_connections (512*1024*1024)/12582880 = 40.69Ihre 40 max-Verbindungen erklären.
Nick Tsai
2
Sie können den Wert überprüfen, indem Sie RDS MySQL mit dem Befehl abfragen show variables like 'max_connections';.
Nick Tsai,
1
Sie können einen neuen erstellen parameter groupund den Wert von max_connections in den gewünschten Wert ändern . Dies ist das neue Verbindungslimit für Ihre RDS-Instanz.
BackslashN
1
Diese Antwort hat sich im Jahr 2019 SHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein,
30

Sie können den max_connectionsWert ändern , indem Sie entweder die Standardparameterrichtlinie aktualisieren oder eine neue Richtlinie erstellen. Ich würde empfehlen, die letztere zu verwenden.

  • Gehe zu RDS
  • Parametergruppen
  • Erstellen Sie eine neue Parametergruppe (AWS lässt alles als Standard)
  • suche nach dem max_connectionsWert
  • Ändern Sie den zu verwendenden Wert
  • Gehen Sie zur RDS-Instanz und ändern Sie sie
  • Wählen Sie die neu erstellte Parametergruppe aus und starten Sie die Instanz neu oder lassen Sie AWS sie beim nächsten Wartungsfenster neu starten

Hoffe das hilft!

David
quelle
2
<3 Dies sollte die akzeptierte Antwort sein
bbozo
2
Obwohl ich max_connections auf 1000 gesetzt habe, erlaubte rds immer noch nur 100 maximale Verbindungen auf einer Mikroinstanz
Miguel Mota
1

Während das Erhöhen der maximalen Anzahl von Verbindungen in der Serverkonfiguration möglicherweise das Problem behebt, sollten Sie in Betracht ziehen, die Anwendungskonfigurationen und -implementierungen zu überprüfen.

Ich bin kein Magento-Experte, aber als ich kürzlich ein ähnliches Problem bei einem Projekt hatte, an dem ich arbeitete, bemerkte ich, dass die Standardimplementierung des von mir verwendeten Frameworks bei jedem Aufruf der Datenbank eine Verbindung herstellte.

Auch wenn dies für einige Benutzer möglicherweise keine Probleme verursacht, ist die Implementierung einer Datenbank der beste Weg, um zu verhindern, dass der Server mit dem Fehler "TOO MANY CONNECTIONS" abstürzt, wenn Sie mehr Besucher haben oder einige datenbankintensive Aufgaben ausführen Verbindungspool.

Dadurch wird verhindert, dass die Anwendung mehr Verbindungen erstellt, die der Server verarbeiten kann, und dass die Anwendung für die Benutzer nicht abstürzt. In einem Verbindungspool wird eine Warteschlange für die Anforderungen zum Zugriff auf die Datenbank gespeichert, bis eine Verbindung verfügbar wird, sodass die Benutzeranforderung verarbeitet werden kann.

Denken Sie daran, dass der Verbindungspool in einem Multithread-Szenario threadsicher sein sollte.

Uriel Bertoche
quelle
1

Melden Sie sich bei Ihrer RDS-Instanz an (mit einem MySQL-Client) und führen Sie die folgende Abfrage aus:

SHOW VARIABLES LIKE 'max_connections';
Shammi Shailaj
quelle
1

Aktuelle Informationen für Postgresql-t3-Instanzen (Parametergruppe default.postgres10):

  • db.t3.micro - 112 max_connections
  • db.t3.small - 225 max_connections
  • db.t3.medium - 450 max_connections
  • db.t3.large - 901 max_connections
  • db.t3.xlarge - 1802 max_connections
  • db.t3.2xlarge - 3604 max_connections

Ähnliches gilt für default.postgres9 und default.postgres11

nestim
quelle
0

Das sind nicht maximal 40 Verbindungen, das sind maximal 40 RDS-Instanzen. Sie verwenden wahrscheinlich nur eine Instanz basierend auf Ihrer Beschreibung.

Sie können Tausende von Verbindungen zum RDS-Server herstellen, da bei jedem Öffnen einer Sitzung mit der Datenbank eine neue Verbindung erstellt wird. Wahrscheinlich stoßen Sie auf Leistungseinschränkungen und sollten die RDS-Instanz vergrößern.

Jason s
quelle
Danke @jason Ich habe die folgenden Informationen: Wenn 40 Verbindung erreicht, reagiert RDS nicht, bis andere Verbindungen geschlossen werden. Wir haben r3.xlarge RDS-Instanz. Hier ist ein Screenshot davon: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/… Wir haben eine inaktive CPU mit einer hohen Anzahl von Verbindungen
Alaa Badran
Dies ist Verbindungen, keine andere Sache
Orlando