postgres-too-many-connections

PostgreSQL 连接数耗尽的定位与修复

现象

客户端报 FATAL: sorry, too many clients already 或 remaining connection slots are reserved for non-replication superuser connections。新连接被拒绝。

快速定位

SHOW max_connections;
SHOW superuser_reserved_connections;
SELECT state, count(*) FROM pg_stat_activity GROUP BY state;
SELECT usename, application_name, count(*)
FROM pg_stat_activity GROUP BY 1,2 ORDER BY 3 DESC;
SELECT pid, state, query_start, query
FROM pg_stat_activity WHERE state <> 'idle' ORDER BY query_start;

常见根因

  1. 应用连接池过大或连接泄漏。
  2. 大量 idle in transaction 连接占位。
  3. 慢查询/锁等待导致连接长期不释放。
  4. max_connections 偏低,或预留连接被占满。
  5. 每个进程/请求新建连接,没有池化。

修复

相关命令