Direkt zum Inhalt

Warum erhalte ich "Too many connections error", wenn ich eine Verbindung zu meiner Amazon-Aurora-MySQL-Instance herstelle?

Lesedauer: 5 Minute
0

Ich möchte eine Verbindung zu meiner Amazon-Aurora-MySQL-kompatiblen Edition DB-Instance herstellen, erhalte aber die Fehlermeldung "Too many connections". Ich möchte den maximalen Verbindungswert für meine DB-Instance herausfinden und wissen, wie ich ihn ändere.

Kurzbeschreibung

Wenn die Anzahl der Client-Verbindungen den Parameterwert max_connections in der DB-Instance überschreitet, erhältst du die Fehlermeldung "Too many connections".

Um dieses Problem zu beheben, sieh dir zunächst alle Anfragen und Threads an, die auf der DB-Instance ausgeführt werden. Aktiviere dann die Protokollierung auf der DB-Instance. Überprüfe die vorhandenen Verbindungen und beende unnötige Verbindungen, um die Verbindungsbelastung zu reduzieren. Passe außerdem die MySQL-Verbindungsparameter an. Wenn das Problem weiterhin auftritt, erhöhe die maximale Anzahl von Verbindungen zu der DB-Instance.

Lösung

Alle Abfragen und Threads ansehen, die auf der DB-Instance ausgeführt werden

Sieh dir alle Abfragen an, die auf der DB-Instance ausgeführt werden. Überprüfe dann den Wert Threads_Connected, um die Anzahl der offenen Verbindungen anzuzeigen. Weitere Informationen findest du unter Threads_connected auf der MySQL-Website.

Führe für MySQL 5.7 den folgenden Befehl aus:

mysql> SELECT variable_value AS Threads_Connected FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name='threads_connected';

Führe für MySQL 8.0 den folgenden Befehl aus:

mysql> SELECT variable_value AS Threads_Connected from performance_schema.global_status where VARIABLE_NAME = 'threads_connected';

Hinweis: Da Aurora vom Administratorbenutzer rdsadmin aus eine Verbindung zur Datenbank herstellen kann, ist der Wert für threads_connected möglicherweise höher als max_connections.

Es hat sich bewährt, threads_connected oder information_schema.processlist anstelle von DatabaseConnections zu verwenden. Die Parameter threads_connected und information_schema.processlist zeigen die verfügbaren MySQL-Verbindungen an, die andere Clients verwenden.

DatabaseConnections zeigt die Gesamtzahl der Remote-TCP-Verbindungen an, jedoch nicht die inaktiven Verbindungen oder Sitzungen, die die Datenbank-Engine für eigene Zwecke erstellt. Daher ist der DatabaseConnections-Wert möglicherweise niedriger als die Anzahl der Operationen, die MySQL-Threads ausführt.

Aktivieren der Protokollierung auf der DB-Instance

Aktiviere die Protokollierung auf der Aurora-MySQL-kompatiblen DB-Instance, um die Ursache für die erhöhte Anzahl von Verbindungen zu ermitteln. Du kannst general_log, slow_query_log oder Protokollparameter für erweiterte Prüfungen aktivieren.

Unnötige Verbindungen auf der DB-Instance beenden

Verwende die Befehle rds_kill und rds_kill_query, um unnötige Benutzersitzungen und Abfragen zu beenden, die auf der DB-Instance ausgeführt werden.

Die MySQL-Verbindungsparameter anpassen

Passe die folgenden MySQL-Verbindungsparameter für die DB-Instance auf der Grundlage der bevorzugten Werte an:

  • wait_timeout
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout
  • max_execution_time
  • max_connect_errors
  • max_user_connections

Weitere Informationen zu den einzelnen oben genannten Parametern findest du unter Serversystemvariablen auf der MySQL-Website.

Die maximale Anzahl an Verbindungen zur DB-Instance erhöhen

Wenn das Problem nach der Anpassung der Verbindungsparameter immer noch auftritt, erhöhe die maximale Anzahl von Verbindungen zu der DB-Instance. Um den aktuellen max_connections-Wert für die DB-Instance abzurufen, überprüfe die Parametergruppe, die an die DB-Instance angehängt ist. Oder führe die folgende Abfrage aus:

select @@max_connections;

Aurora-MySQL-kompatibel und Amazon Relational Database Service (Amazon RDS) für MySQL-DB-Instances haben unterschiedliche Mengen an Speicheraufwand. Der Wert von max_connections kann für Aurora-MySQL-kompatible und Amazon RDS für MySQL-DB-Instances, die dieselbe Instance-Klasse verwenden, unterschiedlich sein.

Verwende die folgende Formel, um die maximale Anzahl von Verbindungen für die Instance-Klasse zu ermitteln:

max_connections = GREATEST({log(17179869184/805306368)*45},{log(17179869184/8187281408)*1000})

Hinweis: Das vorherige Beispiel bezieht sich auf eine Aurora-MySQL-kompatible Instance db.r8g.large mit 16 GiB Speicher. Der DBInstanceClassMemory entspricht 17179869184 Byte. Der aktuelle Wert für max_connections ist 1000.

Beispielergebnis:

max_connections = GREATEST(195.56,1000) = 1000

Hinweis: Die maximale Anzahl von Verbindungen für diese Instance-Klasse db.r8g.large mit 16-GiB-Speicher entspricht dem Standardwert.

Den Parameter max_connections erhöhen

Hinweis: Es ist keine bewährte Methode, den Wert max_connections über den Standardwert hinaus zu erhöhen. Skaliere stattdessen die DB-Instance.

Wenn du die DB-Instance nicht skalierst und stattdessen den Wert von max_connections erhöhen möchtest, führe die folgenden Schritte aus:

  1. Erstelle eine benutzerdefinierte DB-Instance-Parametergruppe.
  2. Verknüpfe die Parametergruppe mit der DB-Instance.
  3. Erhöhe den Parameter max_connections.
    Hinweis: Es kommt nicht zu einem Ausfall, wenn du einen höheren Wert max_connections festlegst.

Hochskalieren der Instance

Wenn du den Maximalwert für den Parameter max_connections überschreitest, empfiehlt es sich, die DB-Instance-Klasse zu skalieren. Bei der DB-Instance kann es zu einem Ausfall kommen, wenn sie skaliert wird.

Bewährte Methoden verwenden, um den Parameter max_connections zu optimieren

Wenn du die Pufferpool- und Abfrage-Cache-Einstellungen für den DB-Cluster geändert hast, passe das Verbindungskontingent an, um die Erhöhung oder Verringerung des verfügbaren Speichers auf den DB-Instances zu berücksichtigen.

Stelle den Parameter max_connections auf etwas höher als die maximale Anzahl von Verbindungen ein, die du voraussichtlich auf jeder DB-Instance öffnen wirst.

Wenn du Performance Insights aktiviert hast, wird das Leistungsschema automatisch aktiviert. Es hat sich bewährt, den Standardwert für max_connections zu verwenden, wenn das Leistungsschema aktiviert ist. Die Speicherstrukturen des Leistungsschemas werden automatisch auf der Grundlage der Serverkonfiguration angepasst.

Wichtig: Performance Insights wird am 30. November 2025 das Ende seiner Lebensdauer erreichen. Du kannst vor dem 30. November 2025 ein Upgrade auf den Modus „Erweitert“ von Database Insights durchführen. Wenn du kein Upgrade durchführst, verwenden DB-Cluster, die Performance Insights verwenden, standardmäßig den Modus „Standard“ von Database Insights. Nur der Modus „Erweitert“ von Database Insights unterstützt Ausführungspläne und On-Demand-Analysen. Wenn die Cluster standardmäßig auf den Modus „Standard“ eingestellt sind, kannst du diese Funktionen möglicherweise nicht auf der Konsole verwenden. Informationen zum Aktivieren des Modus „Erweitert“ findest du unter Einschalten des Modus „Erweitert“ von Database Insights für Amazon RDS und Einschalten des Modus „Erweitert“ von Database Insights für Amazon Aurora.

Verwendung von Amazon-RDS-Proxy

Wenn du immer noch eine Fehlermeldung erhältst, verwende Amazon RDS Proxy für Aurora, um die Skalierbarkeit der Anwendung zu verbessern.

Ähnliche Informationen

Wie behebe ich den Fehler in Amazon RDS für MySQL oder Aurora-MySQL-kompatibel?"Got an error reading communication packets"

AWS OFFICIALAktualisiert vor 4 Monaten