pgbouncer

PostgreSQL 连接池

补充说明

pgbouncer 在应用和 PostgreSQL 之间复用连接,降低数据库连接数和建立连接的开销。它支持 session、transaction、statement 三种池模式。

常用示例

pgbouncer -d /etc/pgbouncer/pgbouncer.ini
pgbouncer -v /etc/pgbouncer/pgbouncer.ini
pgbouncer -R /etc/pgbouncer/pgbouncer.ini

管理控制台:

psql -h 127.0.0.1 -p 6432 -U pgbouncer pgbouncer
SHOW POOLS;
SHOW STATS;
SHOW CLIENTS;
SHOW SERVERS;
RELOAD;
PAUSE;
RESUME;

pgbouncer.ini:

[databases]
app = host=127.0.0.1 port=5432 dbname=app

[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20

易错点与排错

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 使用 transaction 池模式后临时表和 SET 为什么失效?
  2. 修改监听地址后执行 RELOAD 为什么没生效?
  3. 客户端在排队等待连接,先看哪个指标?
答案
  1. 会话级状态不能跨事务保留。
  2. RELOAD 只重载部分配置,改监听地址等需要重启。
  3. SHOW POOLS 的 cl_waiting,并结合 sv_active、sv_idle 判断。