Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion des connexions mortes dans PostgreSQL
Les connexions sont interrompues lorsqu'une session de base de données reste active sur le serveur alors que l'application cliente a été abandonnée ou interrompue de manière anormale. Cette situation se produit généralement lorsque les processus clients se bloquent ou se terminent de manière inattendue sans fermer correctement leurs connexions à la base de données ou annuler les demandes en cours.
PostgreSQL identifie et nettoie efficacement les connexions inactives lorsque les processus du serveur sont inactifs ou tentent d'envoyer des données aux clients. Cependant, la détection est difficile pour les sessions inactives, en attente de saisie par le client ou en cours d'exécution active de requêtes. Pour gérer ces scénarios, PostgreSQL tcp_keepalives_*
fournit des paramètrestcp_user_timeout
, et. client_connection_check_interval
Rubriques
Comprendre TCP Keepalive
TCP Keepalive est un mécanisme au niveau du protocole qui permet de maintenir et de vérifier l'intégrité de la connexion. Chaque connexion TCP gère les paramètres au niveau du noyau qui régissent le comportement de keepalive. Lorsque le temporisateur Keepalive expire, le système effectue les opérations suivantes :
-
Envoie un paquet de sonde sans aucune donnée et avec l'indicateur ACK activé.
-
Attend une réponse du point de terminaison distant conformément aux TCP/IP spécifications.
-
Gère l'état de la connexion en fonction de la réponse ou de l'absence de réponse.
Principaux paramètres TCP keepalive dans
Paramètre | Description | Valeurs par défaut |
---|---|---|
tcp_keepalives_idle |
Spécifie le nombre de secondes d'inactivité avant d'envoyer un message keepalive. | 300 |
tcp_keepalives_interval |
Spécifie le nombre de secondes entre les retransmissions de messages keepalive non reconnus. | 30 |
tcp_keepalives_count |
Nombre maximum de messages KeepAlive perdus avant de déclarer la connexion interrompue | 2 |
tcp_user_timeout |
Spécifie la durée (en millisecondes) pendant laquelle les données non reconnues peuvent rester avant de fermer de force la connexion. | 0 |
client_connection_check_interval |
Définit l'intervalle (en millisecondes) pour vérifier l'état de la connexion client lors de requêtes de longue durée. Cela garantit une détection plus rapide des connexions fermées. | 0 |
Cas d'utilisation des paramètres TCP Keepalive
Maintien en vie des sessions inactives
Pour empêcher les connexions inactives d'être interrompues par des pare-feux ou des routeurs pour cause d'inactivité :
-
Configurez
tcp_keepalives_idle
pour envoyer des paquets keepalive à intervalles réguliers.
Détecter les connexions mortes
Pour détecter rapidement les connexions inactives :
-
Ajustez
tcp_keepalives_idle
tcp_keepalives_interval
, ettcp_keepalives_count
. Par exemple, avec les paramètres par défaut d'Aurora PostgreSQL, il faut environ une minute (2 sondes × 30 secondes) pour détecter une connexion interrompue. La réduction de ces valeurs peut accélérer la détection. -
tcp_user_timeout
À utiliser pour spécifier le temps d'attente maximal pour un accusé de réception.
Les paramètres TCP keepalive aident le noyau à détecter les connexions mortes, mais PostgreSQL risque de ne pas agir tant que le socket n'est pas utilisé. Si une session exécute une longue requête, il est possible que les connexions inactives ne soient détectées qu'une fois la requête terminée. Dans PostgreSQL 14 et versions supérieuresclient_connection_check_interval
, il est possible d'accélérer la détection des connexions mortes en interrogeant régulièrement le socket lors de l'exécution de la requête.
Bonnes pratiques
-
Définissez des intervalles de conservation raisonnables : réglez
tcp_user_timeout
tcp_keepalives_count
ettcp_keepalives_interval
pour équilibrer la vitesse de détection et l'utilisation des ressources.tcp_keepalives_idle
-
Optimisez pour votre environnement : alignez les paramètres sur le comportement du réseau, les politiques de pare-feu et les besoins des sessions.
-
Tirez parti des fonctionnalités de PostgreSQL : utilisez-les
client_connection_check_interval
dans PostgreSQL 14 et versions supérieures pour des contrôles de connexion efficaces.