Know-How
Connection Pooling
Každé DB spojení stojí ~10MB RAM. Bez poolingu vytvoříte stovky spojení a DB se zhroutí.
Proč pooling
- TCP handshake + TLS = ~100ms per connection
- PostgreSQL fork per connection = ~10MB RAM
- Max connections limit (default 100)
- Connection reuse = dramaticky nižší latence
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, # Recyklace po 30 min
)
PgBouncer
# pgbouncer.ini
[databases]
mydb = host=localhost port=5432 dbname=mydb
[pgbouncer]
pool_mode = transaction # Doporučeno
max_client_conn = 1000
default_pool_size = 25
Klíčový takeaway
Vždy poolujte. SQLAlchemy pool_size=20, PgBouncer pro sdílení poolu mezi aplikacemi.