科技 · 實用指南
PostgreSQL 顯示「remaining connection slots are reserved」?終止 session 前先建立擁有者帳本
先證明一般使用者的連線預算,再按應用與年齡分組、凍結新增連線,只結束已確認的陳舊擁有者或調整 pool。

這個 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 設警示;完成是來源已被停止或限制且容量保持穩定。
