Wie behebe ich Verbindungs-Pinning-Probleme in Amazon RDS Proxy?
Ich möchte Verbindungs-Pinning-Probleme beheben, wenn ich Amazon Relational Database Services (Amazon RDS) Proxy für den Zugriff auf die Zieldatenbank verwende.
Lösung
CloudWatch-Metriken überprüfen
Gehe wie folgt vor:
- Öffne die Amazon-CloudWatch-Konsole.
- Wähle im Navigationsbereich Metriken und dann Alle Metriken.
- Wähle auf der Registerkarte Durchsuchen die Option RDS und dann Per-Proxy-Metriken aus.
- Suche nach der Metrik DatabaseConnectionsCurrentlySessionPinned.
Die Metrik DatabaseConnectionsCurrentlySessionPinned zeigt die Anzahl der Datenbankverbindungen an, die der RDS-Proxy alle 60 Sekunden anheftet. Wenn Vorgänge in der Client-Anforderung den Status der Sitzung ändern, heftet RDS Proxy die Verbindungen an.
Hinweis: Die Metrik DatabaseConnectionsCurrentlySessionPinned beginnt mit der Aufzeichnung, wenn RDS Proxy die erste angeheftete Verbindung erkennt, und stoppt, wenn die angeheftete Verbindung NULL-Werte hat.
RDS-Proxy-Protokollereignisse überprüfen
Um detaillierte Informationen zu den SQL-Anweisungen und internen RDS-Proxy-Vorgängen zu erhalten, ändere den Proxy, um die erweiterte Protokollierung zu aktivieren.
Hinweis: Die erweiterte Protokollierung wird nach 24 Stunden automatisch deaktiviert.
Um Verbindungs-Pinning-Probleme zu beheben, überprüfe die RDS-Proxy-Protokollereignisse.
Gehe wie folgt vor:
- Öffne die CloudWatch-Konsole.
- Wähle im Navigationsbereich Protokolle und dann Protokollgruppen aus.
- Wähle die Protokollgruppe für deinen Proxy aus, z. B. /aws/rds/proxy/name of your proxy.
- Wähle auf der Registerkarte Protokollstreams den Protokollstream aus, um die Protokollereignisse anzuzeigen.
CloudWatch-Log-Insights-Abfragen ausführen, um Anomalien zu erkennen
Gehe wie folgt vor, um auf den Abfrage-Editor in CloudWatch Logs Insights zuzugreifen:
- Öffne die CloudWatch-Konsole.
- Wähle im Navigationsbereich Protokolle und dann Einblicke protokollieren.
Verwende den Abfrage-Editor, um die folgenden Abfragen auszuführen. Ersetze in jeder Abfrage proxy-name durch deinen Proxy-Namen.
Führe die folgende Abfrage aus, um zu ermitteln, warum eine einzelne Verbindung angeheftet wurde:
fields @message | sort @timestamp asc | filter @logStream like '{proxy-name}' | filter @message like /The client session was pinned to the database connection/
Führe die folgende Abfrage aus, um die am häufigsten angehefteten Verbindungen nach Anzahl abzurufen:
fields @message | sort @timestamp asc | filter @logStream like '{proxy-name}' | filter @message like /The client session was pinned to the database connection/ | parse 'Reason: \\\*' as reason | stats count() as reasonCount by reason | sort by reasonCount desc | limit 20
Änderungen an den Sitzungseinstellungen beheben
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Wenn die Client-Verbindung die Variableneinstellungen auf Sitzungsebene ändert, heftet RDS Proxy die Verbindung an, da sie nicht wiederverwendet werden kann.
Dann erhältst du die folgende Fehlermeldung:
„The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: SQL changed session settings that the proxy doesn't track. Consider moving session configuration to the proxy's initialization query.“
Alle Datenbankverbindungen müssen identische Einstellungen haben. Um dieses Problem zu beheben, füge beim Erstellen eines Proxys die Einstellung für die Initialisierungsabfrage hinzu. Gib SQL-Anweisungen für den Proxy an, der ausgeführt werden soll, wenn der Proxy jede neue Datenbankverbindung öffnet. Um einen vorhandenen Proxy zu ändern, kannst du die Amazon-RDS-Konsole verwenden oder den AWS-CLI-Befehl modify-db-proxy-target-group ausführen.
Wichtig: Füge der Initialisierungsabfrage keine vertraulichen Daten wie Passwörter oder langlebige Verschlüsselungsschlüssel hinzu. Authentifizierungs- oder kryptografische Methoden schützen sie nicht, da alle, der Zugriff auf die Proxy-Zielgruppenkonfiguration haben, die Initialisierungsabfrage anzeigen können.
In der Regel verwendest du die Einstellung für die Initialisierungsabfrage mit SET-Anweisungen, sodass jede Verbindung identische Einstellungen hat. Verwende Komma-Trennzeichen, um mehrere Variablen in eine einzelne SET-Anweisung aufzunehmen.
Du kannst beispielsweise den folgenden Befehl ausführen, um eine Zeitzonenvariable in der Initialisierungsabfrage festzulegen:
aws rds modify-db-proxy-target-group --target-group-name default --db-proxy-name proxy --connection-pool-config '{ > "InitQuery": "SET time_zone = \"+00:00\";" > }'
Hinweis: Ersetze proxy durch deinen Proxy-Namen.
Fehler beim Analysieren von Nachrichten und bei vorbereiteten Anweisungen auf Protokollebene beheben
Wenn bestimmte Bibliotheken wie asyncpg/mysql.connector intern vorbereitete Anweisungen auf Protokollebene verwenden, erhältst du eine der folgenden Fehlermeldungen:
- „The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A parse message was detected.“
- „The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A protocol-level prepared statement was detected.“
Wenn der Client die vorbereiteten Anweisungen verwendet, heftet RDS Proxy die Verbindung an.
Um dieses Problem zu beheben, schließe alle Verbindungen, die vorbereitete Anweisungen verwenden, nachdem der Proxy die Verbindungen explizit verwendet hat.
Große SQL-Abfragen lösen
Möglicherweise erhältst du die folgende Fehlermeldung:
„The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: The connection ran a SQL query which exceeded the 16384 byte limit.“
Für alle DB-Engines, die der RDS-Proxy unterstützt, heftet RDS Proxy eine Sitzung an, wenn es auf SQL-Anweisungen stößt, die größer als 16 KB sind. Es hat sich bewährt, die Größe von SQL-Anweisungen zu reduzieren. Du kannst beispielsweise Kommentare entfernen oder die Verwendung von Alias einschränken.
Verbindungs-Pinning reduzieren
Gehe wie folgt vor, um unnötige Datenbankanforderungen zu vermeiden, die dazu führen können, dass der Proxy eine Verbindung anheftet:
- Entferne Datenbankvorgänge, die ein Verbindungs-Pinning initiieren.
- Verwende Batch-Operationen, um verwandte Anforderungen in einer einzigen Abfrage zu kombinieren.
Gehe wie folgt vor, um die Verbindungseinstellungen zu standardisieren:
- Sorge für konsistente Variablen- und Konfigurationseinstellungen für alle Verbindungen, um die Wiederverwendung auf Transaktionsebene zu verwalten.
- Lege für Amazon RDS für PostgreSQL die Variablen auf der Datenbankseite fest. Wenn du die Variablen auf der Client-Seite festlegst, heftet RDS Proxy die Datenbankverbindung an.
- Verwende für Datenbanken in Amazon RDS für MySQL Sitzungs-Pinning-Filter, um die Datenbankoperationen anzugeben, mit denen die Anforderungen an das Sitzungs-Pinning sicher vermieden werden können.
Es hat sich bewährt, allgemeine SET-Anweisungen in die Initialisierungsabfrage des Proxys zu verschieben, um eine identische Initialisierung über alle Verbindungen hinweg zu gewährleisten und die Wiederverwendung auf Transaktionsebene aufrechtzuerhalten.
Ähnliche Informationen
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 6 Monaten