기술 · 실용 가이드
PostgreSQL “remaining connection slots are reserved”? 세션을 끊기 전에 소유자 원장을 만드세요
일반 사용자 연결 예산을 증명하고 application과 age로 backend를 묶고 새 유입을 멈춘 뒤 확인된 stale owner만 종료하세요.

이 FATAL은 admission 결정이며 모든 backend가 leak이라는 증거가 아닙니다. 일반 사용자 용량을 소진하면 PostgreSQL은 reserved slot을 보호하고 기존 연결에는 active request, idle pool, idle in transaction, replication과 internal process가 섞여 있습니다.
오류와 시간대를 보존하고 새 연결 증가를 멈춘 다음 read-only owner ledger를 만드세요. wait, cancel, terminate, pool 축소, capacity 변경은 PID 목록이 아니라 원장이 결정해야 합니다.
admission 예산 증명
오류, version, provider, endpoint와 첫 failure time을 기록하고 승인된 emergency connection에서 세 설정을 읽습니다.
일반 사용자 budget과 headroom을 계산하고 client backend, internal process와 replication을 분리합니다. 긴급 경로가 없으면 provider control plane이나 support를 사용합니다.
PID가 아닌 owner ledger
database, user, application_name, client, backend type, state로 묶고 가장 오래된 backend, transaction, state-change time을 보존합니다.
빈 application_name은 관찰 공백입니다. client address, replica 수와 pool 설정으로 owner를 확인하고 IP나 idle만으로 종료하지 마세요.
조치 전에 분류
active는 request를 처리 중일 수 있고 idle은 정상 pool일 수 있습니다. idle in transaction은 빠른 owner escalation이 필요하지만 자동 종료 근거는 아닙니다.
runbook에 따라 runaway worker, autoscaling, retry storm 또는 replica에서 오는 새 유입부터 멈춥니다.
가장 좁은 복구 선택
짧은 active work는 안전하면 기다리고 application이 처리할 수 있을 때만 query를 cancel하며 owner와 impact가 확인된 session만 terminate합니다.
정상 client가 너무 많다면 per-process pool과 lifetime을 줄이고 승인된 pooler를 사용하세요. replica, job, admin tool을 모두 합산합니다.
복구 검증과 재발 방지
조치 뒤 headroom, 새 admission, active count와 즉시 refill 여부를 확인하고 전후 ledger를 비교합니다.
headroom, owner growth, oldest transaction과 pool wait에 경보를 두고 leak source가 제한되고 capacity가 안정돼야 완료입니다.
