Connection pooling: PgBouncer
Voer PgBouncer uit in de modus voor transaction pooling, stem de poolgrootte correct af en voorkom de valkuil van prepared statements.
Connection pooling: PgBouncer is een gratis SQL Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
Waarom verbindingen poolen?
Elke Postgres-verbinding is een afzonderlijk OS-proces en belast daardoor geheugen en CPU zwaar. Apps die per verzoek verbindingen openen en sluiten, putten de server snel uit. Pooling hergebruikt een kleine set langdurige verbindingen.
Kosten per verbinding
Een typische Postgres-backend gebruikt 5–10 MB RAM. 500 verbindingen betekent ongeveer 5 GB RAM alleen voor backends. PgBouncer kan duizenden clients multiplexen over 50 backendverbindingen.
Drie poolingmodi
- Session — de client krijgt een speciale verbinding voor de hele sessie
- Transaction — de client krijgt per transactie een verbinding
- Statement — één verbinding per instructie, wordt zelden gebruikt
Transactiemodus (aanbevolen)
Elke transactie krijgt een serververbinding. Dezelfde client kan voor verschillende transacties verschillende verbindingen gebruiken.
# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb
[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50Aandachtspunten bij de transactiemodus
Functies waarvoor sessiestatus nodig is, werken niet:
- Voorbereide instructies (dezelfde backend is nodig voor opeenvolgende aanroepen)
- SET LOCAL ... (per transactie is prima; SET ... dat tussen transacties blijft bestaan niet)
- LISTEN / NOTIFY (een permanente verbinding is nodig)
- Cursors die langer dan een transactie blijven bestaan
Sessiemodus
Gebruik deze modus wanneer de transactiemodus je app niet ondersteunt — maar je krijgt minder gelijktijdige clients.
Pools dimensioneren
Vuistregel: default_pool_size ≈ vCPU count × 2 + spindles. Te hoog betekent dat contextwisselingen de doorvoer verminderen; te laag betekent wachten op de pool.
PgBouncer vóór HAProxy
Typische productiestack:
App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres
Voorbereide instructies in transactiemodus
Recente PgBouncer-versies (1.21+) ondersteunen voorbereide instructies op protocolniveau in transactiemodus. Gebruik in oudere versies eenvoudige query's of de sessiemodus.
PgBouncer monitoren
Maak verbinding met de beheerdatabase, een speciale database:
psql -p 6432 -U pgbouncer pgbouncer
-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;Alternatieven
- pgpool-II — pooling + taakverdeling + query's herschrijven
- Odyssey — de pooler van Yandex, met meerdere threads
- Pools aan de driverzijde — meestal gecombineerd met PgBouncer voor pooling in het hele cluster
Applicatiepool + PgBouncer
Apps hebben doorgaans hun eigen verbindingspool (HikariCP, pgxpool) EN gaan via PgBouncer. Pooling in twee lagen — de app-pool houdt verbindingen met PgBouncer; PgBouncer multiplexet deze over Postgres.
Samenvatting
PgBouncer is essentieel op elke serieuze schaal.
- De transactiemodus is de standaard
- Let op voorbereide instructies / SET / LISTEN
- Poolgrootte ongeveer vCPU × 2
- Monitor met SHOW POOLS
Kennischeck
Welke PgBouncer-modus multiplexet de meeste clients over het kleinste aantal serververbindingen?
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “Connection pooling: PgBouncer” gratis?
Ja — de volledige tekst van “Connection pooling: PgBouncer” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “Connection pooling: PgBouncer”?
Voer PgBouncer uit in de modus voor transaction pooling, stem de poolgrootte correct af en voorkom de valkuil van prepared statements. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Connection pooling: PgBouncer”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- pg_stat_statements: belangrijkste query's
- pgBadger voor loganalyse
- Connection pooling: PgBouncer
- Capaciteitsplanning en bloat-audits