Fonctionnalités
-
Plusieurs niveaux de sévérité lors de la rotation des connexions :
- Pooling de sessions
- Méthode la moins intrusive. Lorsqu’un client se connecte, une connexion serveur lui est attribuée pour toute la durée de sa connexion. Lorsque le client se déconnecte, la connexion serveur est remise dans le pool. Ce mode prend en charge toutes les fonctionnalités de PostgreSQL.
- Pooling de transactions
- Une connexion serveur est attribuée à un client uniquement pendant une transaction. Lorsque PgBouncer détecte la fin de la transaction, elle est remise dans le pool. Ce mode est incompatible avec certaines fonctionnalités de PostgreSQL liées à la session. Il ne peut être utilisé que si l’application évite ces fonctionnalités, répertoriées dans le tableau ci-dessous.
- Pooling d’instructions
- Méthode la plus agressive. Il s’agit d’un pooling de transactions avec une particularité : les transactions à plusieurs instructions sont interdites. Ce mode vise à imposer le fonctionnement en « autocommit » côté client et s’adresse principalement à PL/Proxy.
-
Faibles besoins en mémoire (2 kB par connexion par défaut), car PgBouncer n’a pas besoin de lire chaque paquet en entier d’un seul coup.
-
Il n’est pas lié à un seul serveur backend. Les bases de données de destination peuvent résider sur des hôtes différents.
-
Prise en charge de la reconfiguration à chaud pour la plupart des paramètres.
-
Prise en charge des redémarrages et mises à niveau progressifs à l’aide de plusieurs processus avec
so_reuseport. L’ancien redémarrage en ligne (-R) a été supprimé dans la version 1.26.0.
Carte des fonctionnalités SQL pour les modes de pooling
Le tableau suivant répertorie plusieurs fonctionnalités de PostgreSQL et leur compatibilité avec les modes de pooling de PgBouncer. Le pooling de transactions modifie par conception le comportement du serveur attendu par le client. Il ne peut donc être utilisé que si l’application évite les fonctionnalités incompatibles.
| Fonctionnalité | Pooling de sessions | Pooling de transactions |
|---|---|---|
| Paramètres de démarrage 1 | Oui | Oui |
| SET/RESET | Oui | Pour les paramètres suivis 1 |
| LISTEN | Oui | Jamais |
| NOTIFY | Oui | Oui |
| WITHOUT HOLD CURSOR | Oui | Oui |
| WITH HOLD CURSOR | Oui | Jamais |
| Plans préparés au niveau du protocole | Oui | Oui 2 |
| PREPARE / DEALLOCATE | Oui | Jamais |
| Tables temporaires ON COMMIT DROP | Oui | Oui |
| Tables temporaires PRESERVE/DELETE ROWS | Oui | Jamais |
| Réinitialisation des plans mis en cache | Oui | Oui |
| Instruction LOAD | Oui | Jamais |
| Verrous advisory au niveau de la session | Oui | Jamais |
-
Depuis la version 1.26.0, PgBouncer suit tous les paramètres signalés par le serveur que les clients peuvent modifier :
application_name,client_encoding,DateStyle,default_transaction_read_only(PostgreSQL 14+),IntervalStyle,scram_iterations(PostgreSQL 16+),search_path(PostgreSQL 18+),session_authorization,standard_conforming_stringsetTimeZone. Pour les paramètres que le serveur ne signale pas, seules les valeurs de démarrage sont suivies ; les modifications ultérieures parSETne le sont pas. Consulteztrack_extra_parametersetignore_startup_parameterspour plus de détails et pour les paramètres fournis par des extensions. ↩︎ ↩︎ -
La prise en charge des requêtes préparées au niveau du protocole est activée lorsque
max_prepared_statementsest non nul. La valeur par défaut est 200 ; la définir à 0 désactive cette prise en charge.PREPARE/DEALLOCATEau niveau SQL reste incompatible avec le pooling de transactions, à l’exception deDEALLOCATE ALLetDISCARD ALLlorsque le suivi est activé. ↩︎