mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.7 KiB

Cette page a été importée automatiquement de notre ancien wiki mais n’a pas encore été révisée.

PgBouncer

https://wiki.postgresql.org/wiki/PgBouncer

PgBouncer agit en tant que proxy entre des clients et un ou des serveurs PostgreSQL. Il permet de gérer un pool de connexion et est donc utile lorsque le client ne gère pas soit même son pool, notamment dans le cas de PHP.

Pour PostgreSQL, accepter une nouvelle connexion est très coûteux en terme de ressource car il va forquer un nouveau processus. PgPouncer permet donc de maintenir un pool de connexions actives auprès de PostgreSQL et de les rendre disponibles pour les clients voulant se connecter. PgBouncer a été conçu pour être très peu consommateur de ressources et pouvoir accepter un grand nombre de connexions (pas de fork ni de thread à chaque connexion, programmation évènementielle comme Nginx).

Installation

# aptitude install pgbouncer

Configuration

La configuration se fait dans le fichier /etc/pgbouncer/pgbouncer.ini.

  • La section [databases] doit contenir la liste des bases de données sur lesquelles les clients pourront se connecter, avec une chaine de connexion valide.

    Par exemple :

[databases]
remotedb = dbname=db host=192.0.2.42 port=5433

* =
Les connexions sur la base _remotedb_ seront renvoyées à l'hôte
192.0.2.42 sur le port 5433 et sur la base _db_. Toutes les autres seront
renvoyées en local sur la base initialement demandée dans la requête.
  • La section [pgbouncer] contient différents paramètres pour le fonctionnement de PgBouncer. Les paramètres importants à modifier sont :
  • pool_mode : permet de définir quand une connexion peut être réattribuée (session dans le cas d’une déconnexion explicite du client (peu de gain de performance mais permet d'être complètement transparent pour le client), transaction lorsqu’une transaction est terminée, statement lorsque une requête est terminée (les transactions ne peuvent alors plus être utilisées)) ;
  • max_client_conn : le nombre total de client qui peuvent être connectés simultanément à PgBouncer. Exemple : 5000
  • default_pool_size : le nombre total de client qui peuvent être connectés simultanément au serveur PostgreSQL derrière. Il ne faut pas dépasser le max_connections du serveur en question moins une vingtaine (pour les connexions réservées au superadmin). Si default_pool_size est dépassé (mais pas max_client_conn), alors les nouvelles connexions seront mises en attente.

userlist.txt

Monitoring et administration

Connexion à la console pgbouncer

Une des fonctionnalités très intéressante de PgBouncer est de pouvoir s’y connecter avec le client psql est d’exécuter des pseudos requêtes SQL :

# psql -p 6432 -U pgbpostgres pgbouncer
psql (9.2.4, server 1.5.4/bouncer)
WARNING: psql version 9.2, server version 1.5.
         Some psql features might not work.
Type "help" for help.

pgbouncer=# 

La requêtes SHOW HELP; permet de lister les requêtes possibles.

Voir les statistiques, connexions établies, etc…

pgbouncer# show pools;
pgbouncer# show clients;
pgbouncer# show servers;
pgbouncer# show stats;

Opérations d’administration

À tester et documenter

FAQ

  • Je vois un pic de connexions qui sont mises en attentant (client_waiting), alors que le default_pool_size est loin d'être dépassé, pourquoi ?

    C’est dû au fonctionnement de PgBouncer : si il reçoit un pic de demande de connexion, afin de ne pas répercuter ce pic sur le backend PostgreSQL, il va ouvrir ses connexions les une après les autres.