Comprendre la gestion des connexions

Effectué

Postgres utilise un modèle de connexion basé sur le processus. L’établissement d’une connexion implique le système d’exploitation et l’allocation d’une petite quantité de mémoire. Chaque requête SQL est exécutée à l’aide d’une connexion actuelle.

États de connexion

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

  • actif : connexions actives, qui exécutent actuellement des requêtes.
  • inactives - connexions ouvertes qui ne sont pas utilisées.
  • inactif dans la transaction - une connexion en attente, ne faisant aucun travail. Utilisez pg_stat_activity pour comprendre ce qu'une connexion fait et combien de temps elle reste dans cet état.
  • inactives dans la transaction (abandonnées) — les connexions qui étaient précédemment inactives dans la transaction, mais qui sont désormais abandonnées.

Le modèle de connexion basé sur le processus coûte cher de conserver de nombreuses connexions inactives.

Nombre maximal de connexions

PostgreSQL limite le nombre maximal de connexions simultanées au serveur à tout moment à l’aide d’un paramètre de serveur appelé max_connections. 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 certaines connexions pour que le super utilisateur conserve l’intégrité de la base de données. Cette réservation correspondrait généralement à 15% de la valeur de max_connections.

Azure Database pour PostgreSQL est une solution managée et réserve automatiquement trois connexions pour surveiller un serveur flexible.

Note

Il n’existe aucun paramètre de 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 rencontrer une latence de connexion, ce qui entraîne des transactions inférieures par seconde et une latence d’application supérieure globale.

Azure Database pour PostgreSQL recommande le regroupement de connexions au lieu d’ouvrir et de fermer fréquemment des connexions. Le regroupement de connexions réutilise les connexions existantes, plutôt que de fermer et recréer des connexions. Ce processus réduit la latence de connexion et autorise des transactions de base de données plus élevé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, et ces connexions sont ensuite conservées. Le regroupement de connexions permet également de 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 connexions inté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 dont vous avez besoin. La valeur par défaut est 50.
  6. Définissez le paramètre pgBouncer.pool_mode sur TRANSACTION.

Note

PgBouncer est pris en charge sur les couches de calcul à usage général et optimisé pour la mémoire dans le réseautage à accès public et privé. PgBouncer n’est pas pris en charge sur le niveau de calcul Burstable. Lorsque le niveau de calcul est modifié d'Usage général ou de Mémoire optimisée à 'Burstable', la fonctionnalité PGBouncer est perdue.