核心原则:稳定优先于吞吐。
[ App / Framework / ORM ]
│
▼
PgBouncer (6432)
│
▼
PostgreSQL 16 (5432)
dnf install -y pgbouncer
[databases]
* = host=127.0.0.1 port=5432
[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
unix_socket_dir = /var/run/pgbouncer
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20
reserve_pool_size = 5
reserve_pool_timeout = 3
server_idle_timeout = 60
server_lifetime = 3600
query_wait_timeout = 120
client_idle_timeout = 300
log_connections = 1
log_disconnections = 1
log_pooler_errors = 1
stats_period = 60
ignore_startup_parameters = extra_float_digits
"app1_user" "md5xxxxxxxx"
"app2_user" "md5yyyyyyyy"
生成方式:
SELECT '"' || rolname || '" "md5' || md5(rolpassword || rolname) || '"'
FROM pg_authid
WHERE rolname = 'app1_user';
更新后热加载:
pgbouncer -R /etc/pgbouncer/pgbouncer.ini
ALTER SYSTEM SET max_connections = 100;
SELECT pg_reload_conf();
原则:
禁止:session 级特性
推荐:
SHOW POOLS;
SHOW STATS;
SHOW CLIENTS;
| 指标 | 含义 | 风险 |
|---|---|---|
| cl_waiting | 等待连接 | 池不够 or SQL 慢 |
| sv_active | 活跃后端 | 接近 pool_size |
| avg_xact_count | 事务速率 | 性能参考 |
处理顺序:
PgBouncer(transaction)不适合:
PgBouncer 的职责只有一个: 把数据库从“连接不可控”变成“连接可治理”。
在 2C4G 单机场景:
本文由 best 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。