科技 · 实用指南
PostgreSQL 提示“remaining connection slots are reserved”?杀会话前先建所有者账本
先证明普通用户连接预算,再按应用与年龄归组、冻结新增连接,只结束已确认的陈旧所有者或调整连接池;不要先提高 max_connections。

这条 FATAL 是连接准入决定,并不证明所有 backend 都泄漏。普通用户容量耗尽后,PostgreSQL 会保护保留槽;现有连接可能是活动请求、空闲池成员、事务中空闲、复制或内部进程。
保存错误与时间窗,尽量先停止新增连接,再建立只读所有者账本。决定等待、取消、终止、缩池或扩容的应是账本,而不是一串 PID。
证明准入预算
记录错误、版本、供应商、端点和首次失败时间。通过授权紧急连接读取三个参数,不假设默认值。
计算普通用户预算与剩余量,分开客户端、内部进程和复制;没有紧急入口时走供应商控制面或支持流程。
建立所有者账本
按 database、user、application_name、client、backend type 与 state 分组,并保留最早启动、事务与状态变化时间。
application_name 为空是观测缺口;结合客户端地址、副本数和池配置确认所有者,不能仅凭 IP 或 idle 就终止。
行动前分类
active 可能在服务请求;idle 可能是健康池库存;idle in transaction 需快速升级但仍不能自动判定废弃。
先冻结连接增量:暂停失控 worker、限制扩缩容、降低重试风暴或按 runbook 排空副本。
选择最窄恢复动作
安全时等待短活动;确认应用能处理时才取消查询;只有所有者、影响和陈旧条件明确且 runbook 授权时才终止整个会话。
合法客户端过多时,缩小每进程池、限制寿命并采用获准 pooler;计算全部副本、任务和管理工具。
验证与防复发
行动后核对普通用户余量、新连接成功、活动数量稳定且不立即回填,并比较前后账本。
对准入余量、所有者增长、最老事务和池等待告警;完成条件是泄漏源被停止或约束且容量持续稳定。
