**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.** ## 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.