Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

PostgreSQL 顯示「remaining connection slots are reserved」?終止 session 前先建立擁有者帳本

先證明一般使用者的連線預算,再按應用與年齡分組、凍結新增連線,只結束已確認的陳舊擁有者或調整 pool。

原創示意圖:區分 max_connections、兩個保留區與一般使用者預算。
原創示意圖:區分 max_connections、兩個保留區與一般使用者預算。 Watch at Ease

這個 FATAL 是 admission 決策,不代表所有 backend 都洩漏。一般使用者容量耗盡後,PostgreSQL 會保護保留槽;現有連線可能屬於 active request、idle pool、idle in transaction、replication 或內部程序。

保存錯誤與時間窗,先停止新連線湧入,再建立唯讀擁有者帳本。決定等待、取消、終止、縮 pool 或擴容的應是帳本,不是單純 PID 清單。

證明 admission 預算

記錄錯誤、版本、provider、endpoint 與首次失敗時間。從授權緊急連線讀取三個設定,不假設預設值。

計算一般使用者預算與 headroom,分開 client、internal process 與 replication;沒有緊急路徑時用 provider control plane 或支援。

建立擁有者帳本

按 database、user、application_name、client、backend type、state 分組,並保留最早 backend、transaction 與 state-change 時間。

空白 application_name 是觀測缺口;結合 client address、replica 數和 pool 設定確認擁有者。

行動前分類

active 可能正服務請求;idle 可能是健康 pool;idle in transaction 要快速升級,但 age 與 state 仍不等於可終止。

先凍結新增來源:暫停失控 worker、限制 autoscaling、降低 retry storm 或依 runbook drain replica。

選擇最窄復原

安全時等待短 active work;只有應用可處理時才 cancel query;擁有者與影響已確認且 runbook 授權時才 terminate session。

合法 client 過多時,縮小每 process pool、限制 lifetime 並使用核准 pooler;加總 replica、job、admin tool 與 migration。

驗證並防止復發

行動後確認 headroom、新 admission、穩定 active count 且沒有立即回填,比較前後 owner ledger。

對 headroom、owner growth、oldest transaction 與 pool wait 設警示;完成是來源已被停止或限制且容量保持穩定。

原創示意圖:依 active、idle、idle in transaction 與未知擁有者選擇復原。
原創示意圖:依 active、idle、idle in transaction 與未知擁有者選擇復原。 Watch at Ease