Gestion des connexions mortes dans PostgreSQL - Amazon Aurora

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

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_idletcp_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 et tcp_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.