Behandeln von inaktiven Verbindungen in PostgreSQL - Amazon Relational Database Service

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.

Behandeln von inaktiven Verbindungen in PostgreSQL

Inaktive Verbindungen treten auf, wenn eine Datenbanksitzung auf dem Server aktiv bleibt, obwohl die Client-Anwendung abgebrochen oder auf ungewöhnliche Weise beendet wurde. Eine solche Situation entsteht in der Regel, wenn Client-Prozesse abstürzen oder unerwartet beendet werden, ohne dass ihre Datenbankverbindungen ordnungsgemäß geschlossen oder laufende Anfragen abgebrochen werden.

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

Grundlagen zu TCP-Keepalive

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, führt das System folgenden Aktionen durch:

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

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

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

Wichtige TCP-Keepalive-Parameter in RDS für PostgreSQL

Parameter Beschreibung Standardwerte
tcp_keepalives_idle Specifies number of seconds of inactivity before sending keepalive message. 300
tcp_keepalives_interval Specifies number of seconds between retransmissions of unacknowledged keepalive messages. 30
tcp_keepalives_count Maximum lost keepalive messages before declaring connection dead 2
tcp_user_timeout Specifies how long (in Milliseconds) unacknowledged data can remain before forcibly closing the connection. 0
client_connection_check_interval Sets the interval (in Milliseconds) for checking client connection status during long-running queries. This ensures quicker detection of closed connections. 0

Anwendungsfälle für TCP-Keepalive-Einstellungen

Aufrechterhalten von Sitzungen im Leerlauf

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

  • Konfigurieren Sie tcp_keepalives_idle, um Keepalive-Pakete in regelmäßigen Abständen zu senden.

Erkennen von inaktiven Verbindungen

Gehen Sie wie folgt vor, um inaktive Verbindungen umgehend zu erkennen:

  • Passen Sie tcp_keepalives_idle, tcp_keepalives_interval und tcp_keepalives_count an. Mit den Standardeinstellungen von Aurora PostgreSQL dauert es beispielsweise etwa 1 Minute (2 Proben × 30 Sekunden), um eine interaktive Verbindung zu erkennen. Eine Senkung dieser Werte kann die Erkennung beschleunigen.

  • Verwenden Sie tcp_user_timeout, um die maximale Wartezeit für eine Bestätigung festzulegen.

TCP-Keepalive-Einstellungen helfen dem Kernel, inaktive 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 inaktive Verbindungen möglicherweise erst nach Abschluss der Abfrage erkannt. In PostgreSQL 14 und höheren Versionen kann client_connection_check_interval die Erkennung inaktiver Verbindungen beschleunigen, indem der Socket während der Abfrageausführung regelmäßig abgefragt wird.

Bewährte Methoden

  • Angemessene Keepalive-Intervalle festlegen: Optimieren Sie tcp_user_timeout, tcp_keepalives_idle, tcp_keepalives_count und tcp_keepalives_interval, um für ein ausgewogenes Verhältnis zwischen Erkennungsgeschwindigkeit und Ressourcennutzung zu sorgen.

  • Für Ihre Umgebung optimieren. Richten Sie Einstellungen am Netzwerkverhalten, an Firewall-Richtlinien und an Sitzungsanforderungen aus.

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