Sequelize连接Postgres报too many clients already,用pg bouncer仍未解决
报错根因
错误码53300对应的是PostgreSQL服务端连接数达到max_connections配置上限,拒绝新连接请求。使用pgBouncer后仍报错,一般是连接路径、连接池配置、pgBouncer规则三类问题,可按以下步骤逐一排查修复:
修复步骤
- 校验连接路径:确认Sequelize配置的数据库端口是pgBouncer的监听端口(默认6432),而非PostgreSQL原生端口(默认5432),端口配置错误会导致pgBouncer完全未生效。
- 对齐连接池配置:
- Sequelize单实例的连接池
max参数不要超过10,多实例部署时所有实例的max总和不能超过pgBouncer的max_client_conn配置值 - pgBouncer的
default_pool_size总和不能超过PostgreSQL的max_connections配置值(默认100,需预留至少10个连接给管理员运维使用)
- Sequelize单实例的连接池
- 匹配pgBouncer池模式:如果pgBouncer配置为事务模式(transaction),需确保Sequelize未使用会话级特性(Prepared Statement、游标、LISTEN/NOTIFY等),这类特性会导致pgBouncer无法复用连接,很快占满配额。用到这类特性时要么将pgBouncer切换为会话模式(session),要么在Sequelize配置中添加
prepare: false禁用Prepared Statement。 - 检查Sequelize实例初始化逻辑:不要在请求逻辑中重复实例化Sequelize,每次实例化都会新建独立连接池,极快耗尽连接配额,需全局初始化单例Sequelize实例复用。
- 临时应急方案:调整PostgreSQL的
postgresql.conf中max_connections参数,重启服务生效,该方案仅用于临时恢复业务,长期仍需通过连接池复用控制总连接数。
内容的提问来源于stack exchange,提问作者Avinash Kumar
相关产品推荐
相关产品推荐

