Jede DB-Verbindung kostet ~10MB RAM. Ohne Pooling erstellen Sie Hunderte von Verbindungen und die DB bricht zusammen.
Warum Pooling¶
- TCP-Handshake + TLS = ~100ms pro Verbindung
- PostgreSQL Fork pro Verbindung = ~10MB RAM
- Max-Connections-Limit (Standard 100)
- Verbindungswiederverwendung = dramatisch niedrigere Latenz
SQLAlchemy Pool¶
from sqlalchemy import create_engine engine = create_engine( “postgresql://user:pass@localhost/db”, pool_size=20, max_overflow=10, pool_timeout=30, pool_recycle=1800, # Recycling nach 30 Min )
PgBouncer¶
pgbouncer.ini¶
[databases] mydb = host=localhost port=5432 dbname=mydb [pgbouncer] pool_mode = transaction # Empfohlen max_client_conn = 1000 default_pool_size = 25
Wichtigste Erkenntnis¶
Immer poolen. SQLAlchemy pool_size=20, PgBouncer für gemeinsamen Pool zwischen Anwendungen.