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 context deadlines on queries.

Instrumentation

  • Track pool acquire latency, in-use/idle, wait count, timeouts.
  • Log slow queries; sample EXPLAIN ANALYZE in 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.