Connection pooling duy trì pool of reusable database connections thay vì tạo connection mới cho mỗi request.
- Tạo connection tốn 20-100ms (TCP handshake, SSL negotiation, auth, session setup) — với 1000 requests/s việc tạo new connection mỗi lần là catastrophic.
- PgBouncer: connection pooler phổ biến nhất cho PostgreSQL, đứng giữa app và DB, hỗ trợ 3 modes: Session (connection held for entire client session), Transaction (connection returned to pool after each transaction — recommended), Statement (per-statement, most aggressive nhưng không support multi-statement transactions).
- Pool sizing formula: connections = (core_count 2) + effective_spindle_count — ví dụ server 4 cores với SSD: 42+1 = 9 connections; lớn hơn không phải lúc nào cũng tốt hơn vì context switching overhead.
- Prisma connection pool: DATABASE_URL='postgresql://...?connection_limit=10&pool_timeout=20' — connection_limit per Prisma instance.
- Serverless challenges: mỗi Lambda/Edge function có pool riêng — với 1000 concurrent invocations = 1000 * pool_size connections đến DB, vượt quá PostgreSQL max_connections (default 100).
- Giải quyết: PgBouncer ở transaction mode, Prisma Accelerate (managed connection pooling), Neon serverless driver với HTTP-based connections không cần persistent TCP.