Behandlung toter Verbindungen in PostgreSQL - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Behandlung toter Verbindungen in PostgreSQL

Tote Verbindungen treten auf, wenn eine Datenbanksitzung auf dem Server aktiv bleibt, obwohl die Client-Anwendung abgebrochen oder ungewöhnlich beendet wurde. Diese Situation tritt typischerweise auf, wenn Client-Prozesse abstürzen oder unerwartet beendet werden, ohne dass ihre Datenbankverbindungen ordnungsgemäß geschlossen oder laufende Anfragen abgebrochen werden.

PostgreSQL identifiziert und bereinigt effizient tote Verbindungen, wenn Serverprozesse inaktiv sind oder versuchen, Daten an Clients zu senden. Die Erkennung ist jedoch schwierig für Sitzungen, die inaktiv sind, auf Client-Eingaben warten oder aktiv Abfragen ausführen. Um diese Szenarien zu handhaben, stellt PostgreSQL Parameter tcp_keepalives_*tcp_user_timeout, und client_connection_check_interval bereit.

TCP-Keepalive verstehen

TCP Keepalive ist ein Mechanismus auf Protokollebene, der dabei hilft, die Verbindungsintegrität aufrechtzuerhalten und zu überprüfen. Jede TCP-Verbindung verwaltet Einstellungen auf Kernelebene, die das Keepalive-Verhalten steuern. Wenn der Keepalive-Timer abläuft, geht das System wie folgt vor:

  • Sendet ein Testpaket ohne Daten und mit gesetztem ACK-Flag.

  • Erwartet eine Antwort vom Remote-Endpunkt gemäß den TCP/IP Spezifikationen.

  • Verwaltet den Verbindungsstatus auf der Grundlage der Antwort oder des Fehlens einer Antwort.

Wichtige TCP-Keepalive-Parameter in

Parameter Beschreibung Standardwerte
tcp_keepalives_idle Gibt die Anzahl der Sekunden der Inaktivität an, bevor eine Keepalive-Nachricht gesendet wird. 300
tcp_keepalives_interval Gibt die Anzahl der Sekunden zwischen erneuten Übertragungen unbestätigter Keepalive-Nachrichten an. 30
tcp_keepalives_count Höchstzahl verloren gegangener Keepalive-Nachrichten, bevor die Verbindung für unterbrochen erklärt wird 2
tcp_user_timeout Gibt an, wie lange (in Millisekunden) unbestätigte Daten verbleiben können, bevor die Verbindung gewaltsam geschlossen wird. 0
client_connection_check_interval Legt das Intervall (in Millisekunden) für die Überprüfung des Client-Verbindungsstatus bei Abfragen mit langer Laufzeit fest. Dadurch wird eine schnellere Erkennung geschlossener Verbindungen gewährleistet. 0

Anwendungsfälle für TCP-Keepalive-Einstellungen

Inaktive Sitzungen am Leben erhalten

Um zu verhindern, dass inaktive Verbindungen aufgrund von Inaktivität durch Firewalls oder Router beendet werden:

  • Konfigurieren Sie tcp_keepalives_idle das Senden von Keepalive-Paketen in regelmäßigen Abständen.

Erkennung toter Verbindungen

Um tote Verbindungen umgehend zu erkennen:

  • Passen Sie tcp_keepalives_idletcp_keepalives_interval, und antcp_keepalives_count. Bei den Standardeinstellungen von Aurora PostgreSQL dauert es beispielsweise etwa eine Minute (2 Sonden × 30 Sekunden), um eine unterbrochene Verbindung zu erkennen. Eine Senkung dieser Werte kann die Erkennung beschleunigen.

  • tcp_user_timeoutDient zur Angabe der maximalen Wartezeit für eine Bestätigung.

TCP-Keepalive-Einstellungen helfen dem Kernel, tote Verbindungen zu erkennen, aber PostgreSQL reagiert möglicherweise erst, wenn der Socket verwendet wird. Wenn in einer Sitzung eine lange Abfrage ausgeführt wird, werden tote Verbindungen möglicherweise erst nach Abschluss der Abfrage erkannt. client_connection_check_intervalKann in PostgreSQL 14 und höheren Versionen die Erkennung unterbrochener Verbindungen beschleunigen, indem der Socket während der Abfrageausführung regelmäßig abgefragt wird.

Bewährte Methoden

  • Legen Sie angemessene Keepalive-Intervalle fest: Optimieren Sietcp_user_timeout, und sorgen Sie für ein ausgewogenes Verhältnis zwischen tcp_keepalives_idle tcp_keepalives_count Erkennungsgeschwindigkeit und tcp_keepalives_interval Ressourcennutzung.

  • Optimieren Sie für Ihre Umgebung: Passen Sie die Einstellungen an das Netzwerkverhalten, die Firewall-Richtlinien und die Sitzungsanforderungen an.

  • Nutzen Sie die PostgreSQL-Funktionen: Verwenden Sie sie client_connection_check_interval in PostgreSQL 14 und höheren Versionen für effiziente Verbindungsprüfungen.