This article was originally published on AI Study Room. For the full version with working code examples and related articles, visit the original post.
Connection Pooling Guide
Connection Pooling Guide
Connection Pooling Guide
Connection Pooling Guide
Connection Pooling Guide
Connection Pooling Guide
Connection Pooling Guide
Connection Pooling Guide
Why Connection Pooling Matters
Creating database connections is expensive: TCP handshake, SSL negotiation, and authentication add 7-35ms per connection. Connection pooling reuses established connections.
How Pools Work
A pool maintains a set of open connections. When a thread requests one, an idle connection is returned immediately. If all are busy, the thread waits.
Pool Configuration
| Parameter | Recommended | |-----------|-------------| | maxSize | 10-20 per CPU core | | connectionTimeout | 30000ms | | maxLifetime | 1800000ms (30min) |
HikariCP (Java)
spring.datasource.hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
max-lifetime: 1800000
PgBouncer (PostgreSQL)
[pgbouncer]
pool_mode = transaction
default_pool_size = 25
max_client_conn = 100
Pgbouncer sits between application and database. Transaction mode returns connections to pool after each transaction.
Sizing Formula
pool_size = (core_count * 2) + effective_spindle_count
For 8 CPU cores with SSD: 17 connections. More connections causes context switching overhead.
Monitoring
SELECT state, count(*) FROM pg_stat_activity
WHERE backend_type = 'client backend' GROUP BY state;
Monitor for idle-in-transaction connections and pool exhaustion.
Conclusion
Size pools based on CPU cores, not concurrent users. Use PgBouncer for high-scale PostgreSQL deployments. Set timeouts and max lifetimes. Monitor pool usage and connection leaks.
Read the full article on AI Study Room for complete code examples, comparison tables, and related resources.
Found this useful? Check out more developer guides and tool comparisons on AI Study Room.
Top comments (0)