

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
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling"></a>

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.

**Topics**
+ [Grundlagen zu TCP-Keepalive](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Understanding)
+ [Wichtige TCP-Keepalive-Parameter in RDS für PostgreSQL](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Parameters)
+ [Anwendungsfälle für TCP-Keepalive-Einstellungen](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases)
+ [Best Practices](#Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.BestPractices)

## Grundlagen zu TCP-Keepalive
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Understanding"></a>

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.
+ 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
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.Parameters"></a>


| Parameter | Description | Standardwerte | 
| --- |--- |--- |
| tcp\$1keepalives\$1idle | Gibt die Anzahl der Sekunden der Inaktivität an, bevor eine Keepalive-Nachricht gesendet wird. | 300 | 
| tcp\$1keepalives\$1interval | Gibt die Anzahl der Sekunden zwischen erneuten Übertragungen unbestätigter Keepalive-Nachrichten an. | 30 | 
| tcp\$1keepalives\$1count | Höchstzahl verloren gegangener Keepalive-Nachrichten, bevor die Verbindung für unterbrochen erklärt wird | 2 | 
| tcp\$1user\$1timeout | Gibt an, wie lange (in Millisekunden) unbestätigte Daten verbleiben können, bevor die Verbindung gewaltsam geschlossen wird. | 0 | 
| client\$1connection\$1check\$1interval | 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
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases"></a>

### Aufrechterhalten von Sitzungen im Leerlauf
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases.KeepingAlive"></a>

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
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.UseCases.DetectingDead"></a>

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.

## Best Practices
<a name="Appendix.PostgreSQL.CommonDBATasks.DeadConnectionHandling.BestPractices"></a>
+ **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.