Watch at Ease看见世界,读懂生活。

科技 · 实用指南

PostgreSQL 提示“remaining connection slots are reserved”?杀会话前先建所有者账本

先证明普通用户连接预算,再按应用与年龄归组、冻结新增连接,只结束已确认的陈旧所有者或调整连接池;不要先提高 max_connections。

原创示意图:区分 max_connections、两个保留区与普通用户预算。
原创示意图:区分 max_connections、两个保留区与普通用户预算。 Watch at Ease

这条 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;计算全部副本、任务和管理工具。

验证与防复发

行动后核对普通用户余量、新连接成功、活动数量稳定且不立即回填,并比较前后账本。

对准入余量、所有者增长、最老事务和池等待告警;完成条件是泄漏源被停止或约束且容量持续稳定。

原创示意图:按 active、idle、idle in transaction 与未知所有者选择恢复动作。
原创示意图:按 active、idle、idle in transaction 与未知所有者选择恢复动作。 Watch at Ease