Warum erhalte ich die Fehlermeldung „Too many connections“, wenn ich eine Verbindung zu meiner Amazon Aurora MySQL Instance herstelle?

Lesedauer: 7 Minute
0

Ich versuche, eine Verbindung zu meiner Amazon Aurora MySQL DB Instance herzustellen, und erhalte die Fehlermeldung „Too many connections“. Was ist der maximale Verbindungswert für meine DB Instance und wie kann ich diesen Wert anpassen?

Kurzbeschreibung

Wenn der Client beim Versuch, eine Verbindung zu einem Amazon Aurora MySQL DB Cluster oder Instance herzustellen, auf den Fehler „Too Many Connections“ stößt, bedeutet dies, dass alle verfügbaren Verbindungen von anderen Clients verwendet werden. Dies wird durch den Parameter max_connections definiert.

Möglicherweise treten bei Ihnen die folgenden Symptome auf:

  • Die DatabaseConnections-Metrik in Amazon CloudWatch entspricht ungefähr oder genau dem max_connections-Wert für Ihre Aurora MySQL DB Instance.
  • Der Wert für den Parameter max_connections ist höher als der verfügbare Speicher, der von der DB-Instance-Klasse für Verbindungen bereitgestellt wird. Suchen Sie in CloudWatch nach Anzeichen wie einem niedrigen FreeableMemory-Metrikwert.
  • Es tritt ein FEHLER 1040(): Too many connections im MySQL-Fehlerprotokoll auf.

Sie können aus den folgenden Gründen einen max_connections-Wert erreichen:

  • Plötzlicher oder allmählicher Anstieg der Anzahl der Client-/Anwendungsverbindungen zur DB Instance. Das hat folgende Ursachen:
    • Erhöhung der Workload führt zu mehr Verbindungen.
    • Sperren auf Tabellen-/Zeilenebene, was zu einer Erhöhung der Client-/Anwendungsverbindung führt.
  • Der Client/die Anwendung schließt die Verbindungen nach dem Ende des Vorgangs nicht ordnungsgemäß.
  • Höherer Wert für Verbindungs-Timeout-Parameter wie wait_timeout und/oder interactive_timeout, was zu einer Erhöhung der Anzahl von Verbindungen im Ruhezustand führen kann.

Bevor Sie den Max-Verbindungsfehler beheben, sollten Sie sich zunächst alle Threads ansehen, die derzeit auf Ihrer DB Instance laufen. Aktivieren Sie dann die Protokollierung auf Ihrer DB Instance.

Threads anzeigen, die derzeit auf der Aurora MySQL DB Instance laufen

Der Befehl SHOW FULL PROCESSLIST zeigt, welche Threads derzeit auf Ihrer DB Instance laufen. Melden Sie sich bei Ihrer DB Instance an und führen Sie dann die folgende Abfrage aus:

SHOW FULL PROCESSLIST\G

Sie können auch die folgende Abfrage ausführen, um dieselbe Ergebnismenge zu erhalten:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

Hinweis: Sie müssen Ihrem Benutzerkonto die Administratorrechte für den MySQL PROCESS Server gewähren, um alle Threads sehen zu können, die auf einer MySQL DB Instance laufen. Andernfalls zeigt SHOW PROCESSLIST nur die Threads an, die mit dem von Ihnen verwendeten MySQL-Konto verknüpft sind. Weitere Informationen finden Sie in der MySQL-Dokumentation für Berechtigungen von MySQL.

Hinweis: Die Anweisungen SHOW FULL PROCESSLIST und INFORMATION\ _SCHEMA.PROCESSLIST können sich negativ auf die Leistung auswirken, da sie einen Mutex benötigen.

Protokollierung auf Aurora MySQL DB Instance aktivieren

Aktivieren Sie die Protokollierung auf Ihrer Aurora MySQL DB Instance, indem Sie general_log, slow_query_log oder advanced auditing log parameters aktivieren.

Behebung

Beheben Sie den Max-Verbindungsfehler mit einer der folgenden Methoden:

  • Überprüfen Sie die vorhandenen Verbindungen und schließen Sie sie, wenn möglich, um die Belastung durch die Verbindungen zu verringern. Beginnen Sie beispielsweise damit, Verbindungen im Ruhezustand zu beenden.
  • Erhöhen Sie die maximale Anzahl von Verbindungen zu Ihrer DB Instance.

Bestehende Verbindungen auf Ihrer DB Instance beenden

Beenden Sie Benutzersitzungen oder Abfragen, die derzeit auf Ihrer DB Instance laufen, indem Sie die Befehle rds_kill und rds_kill_query ausführen:

CALL mysql.rds_kill(thread-ID);
CALL mysql.rds_kill_query(thread-ID);

Die maximale Anzahl an Verbindungen zu Ihrer DB Instance erhöhen

Erhöhen Sie die maximale Anzahl von Verbindungen zu Ihrer DB Instance mithilfe der folgenden Methoden:

  • Skalieren Sie die Instance auf eine DB-Instance-Klasse mit mehr Speicher.Hinweis: Die Skalierung der DB-Instance-Klasse führt zu einem Ausfall.
  • Legen Sie mithilfe einer benutzerdefinierten Parametergruppe auf Instance-Ebene einen größeren Wert für den Parameter max_connections fest. Eine Erhöhung des Parameters max_connections führt nicht zu einem Ausfall. Wenn Ihre DB Instance jedoch eine Standardparametergruppe verwendet, ändern Sie die Parametergruppe in eine benutzerdefinierte Parametergruppe. Eine Änderung der Parametergruppe führt zu einem Ausfall. Weitere Informationen finden Sie unter Arbeiten mit DB-Parametergruppen.

Hinweis: Die maximal zulässige Anzahl von Verbindungen zu einer Aurora MySQL DB Instance wird durch den Parameter max_connections in der Parametergruppe auf Instance-Ebene für die DB Instance bestimmt. Siehe folgendes Beispiel:

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

Überprüfen Sie den aktuellen Wert des Parameters max_connections für Ihre DB Instance. Überprüfen Sie dazu die an Ihre DB Instance angehängte Parametergruppe oder führen Sie die folgende Abfrage aus:

select @@max_connections;

Der Parameter max_connections hat die folgenden Spezifikationen:

  • Kann sowohl für den DB Cluster als auch für die DB-Instance-Parametergruppe festgelegt werden. Die Parametereinstellung auf Instance-Ebene wird jedoch wirksam.
  • Der zulässige Wert ist eine Ganzzahl im Bereich von 1 bis 16000.
  • Dynamische Natur (kein Neustart ist erforderlich, um diesen Parameterwert zu ändern).

Weitere Informationen zum Standardwert von max_connections für jede für Aurora MySQL verfügbare DB-Instance-Klasse finden Sie unter Maximale Verbindungen zu einer Aurora MySQL DB Instance.

Hinweis: Aurora MySQL und Amazon Relational Database Service (Amazon RDS) MySQL DB Instances haben unterschiedliche Mengen an Speicheraufwand. Der Wert max_connections kann für Aurora MySQL und RDS MySQL DB Instances, die dieselbe Instance-Klasse verwenden, unterschiedlich sein. Die aufgeführten Werte gelten nur für Aurora MySQL.

Bewährte Methoden zum Optimieren des Parameters max\ _connections

Beachten Sie bei der Arbeit mit dem Parameter max_connections für Ihre DB Instance unbedingt Folgendes.

  • Die Standardverbindungslimits sind für Systeme optimiert, die die Standardwerte für andere wichtige Speicherverbraucher verwenden, wie z. B. Pufferpool und Abfrage-Cache. Wenn Sie diese Einstellungen für Ihren DB Cluster ändern, sollten Sie erwägen, das Verbindungslimit anzupassen, um dem Anstieg oder Rückgang des verfügbaren Speichers auf den DB Instances Rechnung zu tragen.
  • Legen Sie max\ _connections etwas höher als die maximale Anzahl von Verbindungen fest, die Sie auf jeder DB Instance voraussichtlich öffnen werden.
  • Wenn Sie auch performance_schema aktiviert haben, gehen Sie vorsichtig mit der Einstellung des Parameters max_connections um. Die Größe der Speicherstrukturen von Performance Schema wird automatisch auf der Grundlage von Serverkonfigurationsvariablen, einschließlich max_connections, festgelegt. Je höher Sie die Variable setzen, desto mehr Speicher verwendet Performance Schema. In extremen Fällen kann dies bei kleineren Instance-Typen wie T2 und T3 zu Problemen mit unzureichendem Arbeitsspeicher führen. Es hat sich bewährt, max\ _connections auf dem Standardwert zu belassen, wenn Sie Performance Schema verwenden. Wenn Sie vorhaben, die max_connections auf einen Wert zu erhöhen, der deutlich über dem Standardwert liegt, sollten Sie erwägen, Performance Schema zu deaktivieren. Hinweis: Wenn Sie Performance Insights für eine Aurora MySQL DB Instance aktivieren, wird Performance Schema automatisch aktiviert.

Sie können für die Optimierung auch die folgenden MySQL-Verbindungsparameter in Betracht ziehen:

  • wait_timeout: Anzahl der Sekunden, die der Server auf Aktivitäten auf einer nicht interaktiven TCP/IP- oder UNIX-Dateiverbindung wartet, bevor er sie schließt.
  • interactive_timeout: Anzahl der Sekunden, die der Server auf Aktivitäten auf einer interaktiven Verbindung wartet, bevor er sie schließt.
  • net_read_timeout: Anzahl der Sekunden, die auf weitere Daten von einer TCP/IP-Verbindung gewartet wird, bevor der Lesevorgang beendet wird.
  • net_write_timeout: Anzahl der Sekunden, die bei TCP/IP-Verbindungen auf das Schreiben eines Blocks gewartet wird, bevor der Schreibvorgang beendet wird.
  • max_execution_time: Ausführungs-Timeout für SELECT-Anweisungen in Millisekunden.
  • max_connect_errors: Ein Host wird für weitere Verbindungen gesperrt, wenn es mehr als diese Anzahl von unterbrochenen Verbindungen gibt.
  • max_user_connections: Maximale Anzahl gleichzeitiger Verbindungen, die zu einem bestimmten MySQL-Konto zulässig sind.

Hinweis: Dieser Artikel enthält keine empfohlenen oder benutzerdefinierten Werte für diese Parameter, da diese Werte je nach Anwendungsfall variieren.


Weitere Informationen

Maximale Anzahl an Verbindungen zu einer Aurora MySQL DB Instance

Wie überprüfe ich laufende Abfragen für meine Amazon RDS MySQL DB Instance?

Beenden einer Sitzung oder Anfrage

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren