Sizing
- Pool size ≈ CPU cores * 2–4 per service instance; avoid per-request opens.
- For PgBouncer tx-mode: disable session features; avoid session-prepared statements.
Timeouts & limits
- Set
ConnMaxLifetime,ConnMaxIdleTime,MaxOpenConns,MaxIdleConns. - Add statement timeouts; enforce
contextdeadlines on queries.
Instrumentation
- Track pool acquire latency, in-use/idle, wait count, timeouts.
- Log slow queries; sample
EXPLAIN ANALYZEin staging for heavy ones.
Hygiene
- Use prepared statements judiciously; reuse
sqlx.Named/pgx prepared for hot paths. - Prefer keyset pagination; cap result sizes; parameterize everything.
Checklist
- Pool sized and monitored.
- Query timeouts set; slow logs reviewed.
- No per-request connections; connections closed via context cancellation.