0Pricing
SQL Academy · Lektion

Connection Pooling: PgBouncer

Betreiben Sie PgBouncer im Transaktions-Pooling-Modus, dimensionieren Sie die Pools korrekt und vermeiden Sie die Falle vorbereiteter Anweisungen.

Connection Pooling: PgBouncer ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum Verbindungen poolen?

Jede Postgres-Verbindung ist ein eigener Betriebssystemprozess und benötigt viel Speicher und CPU. Anwendungen, die pro Anfrage Verbindungen öffnen und schließen, erschöpfen die Serverkapazität schnell. Pooling verwendet eine kleine Anzahl langlebiger Verbindungen wieder.

Kosten pro Verbindung

Ein typischer Postgres-Backend-Prozess benötigt 5–10 MB RAM. 500 Verbindungen entsprechen etwa 5 GB RAM allein für die Backend-Prozesse. PgBouncer kann Tausende von Clients über 50 Backend-Verbindungen multiplexen.

Drei Pooling-Modi

  • Session — der Client erhält für die gesamte Sitzung eine dedizierte Verbindung
  • Transaction — der Client erhält pro Transaktion eine Verbindung
  • Statement — eine Verbindung pro Anweisung (selten verwendet)

Transaktionsmodus (empfohlen)

Jede Transaktion erhält eine Serververbindung. Derselbe Client kann für verschiedene Transaktionen unterschiedliche Verbindungen verwenden.

# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb

[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50

Einschränkungen des Transaktionsmodus

Funktionen, die den Sitzungsstatus benötigen, funktionieren nicht:

  • Prepared Statements (benötigen bei aufeinanderfolgenden Aufrufen dasselbe Backend)
  • SET LOCAL ... (pro Transaktion unproblematisch; SET ..., das darüber hinaus bestehen bleibt, nicht)
  • LISTEN / NOTIFY (benötigen eine dauerhafte Verbindung)
  • Cursor, die eine Transaktion überdauern

Sitzungsmodus

Verwenden Sie ihn, wenn der Transaktionsmodus Ihre Anwendung beeinträchtigt — allerdings können dann weniger Clients gleichzeitig verbunden sein.

Pools dimensionieren

Als Richtwert gilt: default_pool_size ≈ vCPU count × 2 + spindles. Ein zu großer Pool führt durch häufige Kontextwechsel zu geringerem Durchsatz; ein zu kleiner Pool lässt Clients auf freie Poolverbindungen warten.

PgBouncer vor HAProxy

Typischer Produktions-Stack:

App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres

Prepared Statements im Transaktionsmodus

Aktuelle PgBouncer-Versionen (1.21+) unterstützen Prepared Statements auf Protokollebene im Transaktionsmodus. Verwenden Sie bei älteren Versionen einfache Abfragen oder den Sitzungsmodus.

PgBouncer überwachen

Stellen Sie eine Verbindung zur Admin-Datenbank her (einer speziellen Datenbank):

psql -p 6432 -U pgbouncer pgbouncer

-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;

Alternativen

  • pgpool-II — Pooling + Load-Balancing + Umschreiben von Abfragen
  • Odyssey — Pooler von Yandex, mit mehreren Threads
  • Pools auf Treiberseite — meist in Kombination mit PgBouncer für clusterweites Pooling

Anwendungspool + PgBouncer

Anwendungen verwenden normalerweise ihren eigenen Verbindungspool (HikariCP, pgxpool) UND laufen über PgBouncer. Zweistufiges Pooling — der Anwendungspool hält Verbindungen zum Bouncer; der Bouncer multiplexet sie über die Postgres-Verbindungen.

Zusammenfassung

PgBouncer ist bei jeder nennenswerten Skalierung unverzichtbar.

  • Der Transaktionsmodus ist der Standard
  • Achten Sie auf Prepared Statements / SET / LISTEN
  • Poolgröße etwa vCPU × 2
  • Überwachen Sie den Pool mit SHOW POOLS

Kurzer Check

Welcher PgBouncer-Modus multiplexet die meisten Clients über die wenigsten Serververbindungen?

Häufig gestellte Fragen

Ist die Lektion „Connection Pooling: PgBouncer“ kostenlos?

Ja — der vollständige Text von „Connection Pooling: PgBouncer“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Connection Pooling: PgBouncer“?

Betreiben Sie PgBouncer im Transaktions-Pooling-Modus, dimensionieren Sie die Pools korrekt und vermeiden Sie die Falle vorbereiteter Anweisungen. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Connection Pooling: PgBouncer“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. pg_stat_statements: Wichtigste Abfragen
  2. pgBadger für die Log-Analyse
  3. Connection Pooling: PgBouncer
  4. Kapazitätsplanung und Bloat-Prüfungen
← Zurück zu SQL Academy