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.
Themen
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_intervalundtcp_keepalives_countan. 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_countundtcp_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_intervalin PostgreSQL 14 und höheren Versionen für effiziente Verbindungsprüfungen.