Azure PostgreSQL弹性服务器PgBouncer连接占满问题的配置优化咨询
问题分析与配置调整建议
核心问题
你的Azure PostgreSQL弹性服务器(D2s_v3,2核8GiB内存)当前max_connections=100,PgBouncer已占满所有连接槽,导致直接连接时报Remaining connection slots are reserved错误;同时PgBouncer出现零星连接错误,是因为连接池资源被耗尽但PostgreSQL端无失败记录。
配置调整方案
1. 不建议盲目增大max_connections
2核8GiB规格的PostgreSQL,max_connections=100已经接近合理上限——每个PostgreSQL连接会占用10-20MB内存,盲目调大可能触发内存不足,导致服务器性能下降甚至崩溃。此外Azure PostgreSQL弹性服务器的max_connections受实例规格限制,硬调高会引发资源瓶颈。
2. 调整PgBouncer核心参数
- 降低
default_pool_size:从当前50下调至30-40,预留20-30个连接槽给直接连接(如运维排查、监控工具),避免PgBouncer占满所有PostgreSQL连接。 - 设置
reserve_pool_size:配置为10-15,预留少量连接池资源给优先级高的客户端,避免连接池完全耗尽导致零星连接错误。 - 启用
server_idle_timeout:设置为300秒(5分钟),自动释放PgBouncer中闲置的后端服务器连接,避免长期占用PostgreSQL连接槽。 - 检查事务行为:当前
pool_mode=TRANSACTION适合短事务场景,需确保应用端事务及时提交/回滚,避免连接因长期未结束的事务被占用。
3. 预留超级用户连接槽
调整PostgreSQL的superuser_reserved_connections参数到10左右(默认是3),确保即使PgBouncer占满普通连接,超级用户仍能直接连接服务器排查问题。
4. 排查连接占用情况
在PgBouncer中执行以下命令,分析连接状态:
SHOW POOLS; SHOW SERVERS;
查看是否有长期占用的连接,定位到应用端优化事务逻辑,减少连接占用时长。
内容的提问来源于stack exchange,提问作者aweis
相关产品推荐
相关产品推荐

