Frage AWS RDS-Verbindungsbeschränkungen


Der RDS - Server verfügt über maximal 40 Verbindungen, wie in die folgende Dokumentation
Ich benutze Magento 1.9, und an einigen Punkten erreiche ich die maximale Anzahl, dann ist die Webseite außer Betrieb.
Haben Sie eine empfohlene Lösung, um dieses Problem zu lösen?

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


21
2017-07-16 08:59


Ursprung


"Wenn ich zwei Webserver mit einem RDS-Server verbunden habe, dann sollte ich zwei RDS-Verbindungen haben, nicht mehr."  Das ist ein falsches Verständnis. Es ist normalerweise 1 Verbindung pro Arbeitsprozess oder Thread. - Michael - sqlbot
Danke @ Michael-sqlbot .. Ja, ich verstehe das falsch, aber ich wollte sicher gehen. Aber warum, wenn wir 40 Verbindungen zu RDS haben, verweigert es andere Verbindungen und ist nicht erreichbar, bis andere Verbindungen geschlossen sind? - Alaa Badran
Das ist von Entwurf, von der max_connections Parameter. Für die meisten Arbeitslasten sollten Sie in der Lage sein, diese sicher zu erhöhen, da es sich um einen sicheren konservativen Standardwert handelt. Sie sollten jedoch die Ursache dieser Spitzen untersuchen. - Michael - sqlbot


Antworten:


Die Begrenzungsvariable AWS RDS max_connections basiert auf dem Instance-Typ. Sie können also Ihr RDS aktualisieren oder mehr Repliken erstellen.

Die RDS-Typen mit max_connections limit:

  • t2.micro 66
  • t2.small 150
  • m33.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

Verweisen durch max_connections bei AWS RDS MySQL-Instanzgrößen im Jahr 2015

Update 2017-07

Die aktuelle Einstellung RDS MySQL max_connections ist standardmäßig auf {DBInstanceClassMemory/12582880}, wenn du benutzt t2.micro Bei 512 MB RAM könnten die max_connections (512 * 1024 * 1024) / 12582880 ~ = 40 usw. sein.


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


38
2017-07-16 14:55



Ich weiß das, aber wenn 40 Verbindungen erreicht werden, antwortet der Server nicht? Überprüfen Sie dies: drive.google.com/file/d/0B-_uggt0MBYOZELEMEItWDIwUEk/... - Alaa Badran
@AlaaBadran Was ist dein Instanztyp des RDS? - Nick Tsai
Ich überprüfe die RDS-Parametergruppen, die max_connections ist standardmäßig von {DBInstanceClassMemory/12582880}, wenn Sie also t2.micro mit 512MB RAM verwenden, könnten die max_connections sein (512*1024*1024)/12582880 = 40.69 was deine 40 maximalen Verbindungen erklären könnte. - Nick Tsai
Wir haben r3.xlarge. - Alaa Badran
Sie können den Wert überprüfen, indem Sie diesen RDS MySQL mit Befehl abfragen show variables like 'max_connections';. - Nick Tsai


Sie können das ändern max_connection Wert entweder durch Aktualisieren der Standard-Parameter-Richtlinie oder erstellen Sie eine neue - ich würde vorschlagen, mit der letzteren zu gehen.

  • Gehe zu RDS
  • Parametergruppen
  • Erstellen Sie eine neue Parametergruppe (AWS wird alles als Standard belassen)
  • suchen nach max_connections
  • Ändern Sie den zu verwendenden Wert
  • Wechseln Sie zur RDS-Instanz und ändern Sie sie
  • Wählen Sie die neue erstellte Parametergruppe aus und starten Sie die Instanz neu oder lassen Sie AWS beim nächsten Wartungsfenster neu starten

Hoffe das hilft!


17
2017-11-01 18:10



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


Das sind nicht 40 Verbindungen, also maximal 40 RDS-Instanzen. Sie verwenden höchstwahrscheinlich nur 1 Instanz basierend auf Ihrer Beschreibung.

Sie können Tausende von Verbindungen zum RDS-Server haben, da jedes Mal, wenn eine Sitzung mit der Datenbank geöffnet wird, eine neue Verbindung erstellt wird. Sie stoßen wahrscheinlich auf Leistungseinschränkungen und sollten darauf achten, dass die RDS-Instanz größer wird.


0
2017-07-16 14:00



Danke @jason Ich habe die folgenden Informationen: Wenn 40 Verbindung erreicht wird, reagiert RDS nicht, bis andere Verbindungen schließen. Wir haben r3.xlarge RDS-Instanz. Hier ist ein Screenshot davon: drive.google.com/file/d/0B-_uggt0MBYOZELEMEItWDIwUEk/...  Wir haben eine freie CPU mit einer hohen Anzahl von Verbindungen - Alaa Badran
Das sind Verbindungen, keine andere Sache - Orlando


Während das Erhöhen der maximalen Verbindungen in der Serverkonfiguration das Problem möglicherweise beheben kann, sollten Sie Ihre Anwendungskonfigurationen und -implementierungen überprüfen.

Ich bin kein Experte für Magento, aber da ich kürzlich ein ähnliches Problem bei einem Projekt hatte, an dem ich gerade arbeitete, bemerkte ich, dass die Standardimplementierung des verwendeten Frameworks eine Verbindung mit jedem Aufruf der Datenbank erstellte.

Auch wenn dies für einige keine Probleme verursacht, ist es in dem Moment, in dem Sie mehr Besucher oder einige Aufgaben haben, die datenbankintensiv sind und auf mehreren Verbindungen ausgeführt werden können, am besten, eine Datenbank zu implementieren, wenn der Server mit dem Fehler "ZU VIELEN VERBINDUNGEN" abstürzt Verbindungspool.

Dies verhindert, dass die Anwendung mehr Verbindungen erstellt, die der Server verarbeiten kann, und die Anwendung nicht auf die Benutzer abstürzt. Ein Verbindungspool würde eine Warteschlange für die Anforderungen zum Zugriff auf die Datenbank behalten, bis eine Verbindung verfügbar wird, damit die Verarbeitung der Benutzeranforderung fortgesetzt werden kann.

Bedenken Sie jedoch, dass der Verbindungspool in einem Multi-Thread-Szenario Thread-sicher sein sollte.


0
2017-08-21 14:24





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';

0
2017-09-04 16:36