Comprendre la gestion des connexions

Effectué

PostgreSQL utilise un modèle de connexions basées sur les processus. L’établissement d’une connexion fait appel au système d’exploitation et nécessite l’allocation d’une petite quantité de mémoire. Chaque requête SQL est exécutée via une connexion active.

États de connexion

Une connexion peut se trouver dans l’un des quatre états suivants :

  • active : connexions actives qui sont en train d’exécuter des requêtes.
  • inactive : connexions ouvertes qui ne sont pas en cours d’utilisation.
  • idle in transaction : connexions en attente qui ne font aucun travail. Utilisez pg_stat_activity pour connaître l’activité d’une connexion, et savoir depuis combien de temps elle se trouve dans cet état.
  • inactive dans la transaction (abandonnée) : connexions qui se trouvaient dans l’état inactive dans la transaction, mais qui ont depuis été abandonnées.

Avec le modèle de connexions basées sur les processus, le maintien de nombreuses connexions inactives est coûteux.

Nombre maximal de connexions

PostgreSQL utilise un paramètre serveur appelé max_connectionspour limiter le nombre maximal de connexions simultanées au serveur à un moment t. Dans Azure Database pour PostgreSQL, la valeur par défaut dépend de votre niveau de calcul. La valeur autorisée est comprise entre 25 et 5 000.

Une implémentation locale de PostgreSQL réserve un certain nombre de connexions pour permettre au super utilisateur de maintenir l’intégrité de la base de données. Ce nombre correspond généralement à 15 % de la valeur max_connections.

Azure Database pour PostgreSQL est une solution managée qui réserve automatiquement trois connexions pour la supervision d’un serveur flexible.

Notes

Il n’y a pas de paramètre serveur pour gérer superuser_reserved_connections dans Azure Database pour PostgreSQL.

Regroupement de connexions

Les applications clientes qui ouvrent et ferment fréquemment des connexions peuvent subir une certaine latence de connexion, ce qui réduit le nombre de transactions par seconde et augmente la latence d’application globale.

Dans Azure Database pour PostgreSQL, il est recommandé d’utiliser le regroupement de connexions au lieu d’ouvrir et de fermer fréquemment des connexions. Le regroupement de connexions réutilise les connexions existantes, au lieu de fermer et recréer des connexions à chaque fois. Cela réduit la latence de connexion et augmente le nombre de transactions de base de données par seconde pour les bases de données sur le serveur.

Le regroupement de connexions établit un ensemble fixe de connexions au démarrage du serveur, lesquelles sont ensuite conservées. Le regroupement de connexions contribue également à réduire la fragmentation de la mémoire causée par la création constante de nouvelles connexions sur le serveur.

PGBouncer est une solution de regroupement de connexionsintégrée à Azure Database pour PostgreSQL. Pour activer pgBouncer :

  1. Dans le portail Azure, accédez à votre serveur Azure Database pour PostgreSQL.
  2. Dans le menu de gauche, sélectionnez Paramètres du serveur.
  3. Dans la barre de recherche, recherchez PgBouncer.
  4. Définissez le paramètre pgbouncer.enabled sur true pour activer PgBouncer. Ce paramètre ne nécessite pas de redémarrage du serveur.
  5. Définissez pgbouncer.default_pool_size sur le nombre de connexions par paire utilisateur-base de données qu’il vous faut. La valeur par défaut est de 50.
  6. Définissez le paramètre pgBouncer.pool_mode sur TRANSACTION.

Notes

PgBouncer est pris en charge sur les niveaux de calcul Usage général et À mémoire optimisée dans la mise en réseau d’accès public et d’accès privé. PgBouncer n’est pas pris en charge sur le niveau de calcul Burstable. Si le niveau de calcul est changé du niveau Usage général ou À mémoire optimisée au niveau Burstable, la fonctionnalité PgBouncer est perdue.