Client Area
Votion Edge Simulation Node
DevOpsInfrastructureCloudPerformancePostgreSQLPgBouncer

Scaling PostgreSQL Connection Pooling with PgBouncer (3820)

V
VOTION CORE CONTRIBUTOR
SYSTEM WRITER
8 min read

Technical Overview

At Votion Cloud we manage thousands of PostgreSQL instances serving millions of requests per second. The single biggest bottleneck we see is connection overhead: each new backend process consumes ~10 MB of RAM and 2–5 ms of fork() latency. PgBouncer solves this by multiplexing thousands of client connections over a handful of persistent server connections.

Pool Modes & When to Use Them

  • Session pooling – safest for applications using prepared statements, SET commands, or advisory locks. One server connection per client session.
  • Transaction pooling – releases the server connection at transaction end. Ideal for stateless workloads (ORMs, REST APIs). Reduces idle connections by 90%.
  • Statement pooling – releases after every statement. Maximum density but breaks multi-statement transactions and named prepared statements.

Kernel & PgBouncer Tuning

# /etc/sysctl.d/99-pgbouncer.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 1000000

Apply with sysctl --system. In pgbouncer.ini:

[pgbouncer]
pool_mode = transaction
max_client_conn = 10000
default_pool_size = 250
min_pool_size = 50
reserve_pool_size = 50
reserve_pool_timeout = 5
max_db_connections = 500
max_user_connections = 500
log_connections = 1
log_disconnections = 1
log_pooler_errors = 1
stats_period = 60

Prepared Statement Handling

Transaction pooling discards prepared statements at transaction end. Two strategies:

  1. Disable prepared statements in the driver (preferQueryMode=simple for pgJDBC, prepared_statements=false for Npgsql).
  2. Use PgBouncer 1.18+ prepared_statements = true with pool_mode = transaction – it caches prepared statements per server connection and re-prepares transparently.

Monitoring & Alerting

Key metrics (exposed via SHOW STATS and Prometheus exporter):

  • cl_active / cl_waiting – client pressure
  • sv_active / sv_idle / sv_used – server pool utilisation
  • avg_wait_time – queue latency (target < 1 ms)
  • avg_query_time – backend latency

Alert when cl_waiting > 0 for > 30 s or sv_used / max_db_connections > 0.85.

Hardware Performance Benchmark Telemetry
4.9x HIGHER THROUGHPUT
Votion Edge Bare-Metal Cluster420
Standard Virtual Hypervisor (AWS / GCP)85
METRIC: Random Disk IOPS (k)TELEMETRY: REAL-TIME HARDWARE HARDENING AUDIT
CODE_COMPILER // PYTHON LOAD TEST SNIPPET
V8_SANDBOX_LIVE
// Input Javascript:JS (ES6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Press Ctrl + Enter to run
// EXECUTION_LOGS:
[ Ready for execution context... ]
Cloud Compute Cost Calculator
SAVE UP TO 68% ANNUALLY
vCPU Cores (Dedicated):4 Cores
DDR5 RAM:16 GB
NVMe Gen4 Storage:256 GB
Anycast Egress Bandwidth:5 TB
Votion Cloud Estimate$52/moNo hidden ingress/egress fees
Legacy Cloud Estimate$166/moIncludes compute + egress tax
Net Annual Capital Retained$1,368Re-investable technical capital
CLI_BUILDER // VPS_DEPLOYMENT_COMPILER
READY_TO_DEPLOY
// Select Instance Parameters:
Instance Name:
Anycast Region:
vCPU Allocation:
RAM Memory:
NVMe Storage:
Operating System:
// Command Output Console:
[GENERATED_CMD]
votion deploy core-node-01 --cpu 8 --ram 16 --storage 250 --region fra-1 --os ubuntu-24
// CLI STATE VALIDATION:
Config check OK. Ready to pipe.
Anycast Network Topology Diagram
// NODE_TELEMETRY: LunarShield Scrubbing NodeLATENCY: 0.45ms
STATUS: Filtering 1.2Tbps Spectrum Buffer

eBPF/XDP kernel filter evaluates TCP/UDP frames directly on server NIC.