查询 PostgreSQL 当前连接数的常用方法
以下是查询 PostgreSQL 当前连接数的常用方法,按场景分类整理:
🔹 方法 1:查询当前总连接数(最常用)
SELECT COUNT(*) AS current_connections
FROM pg_stat_activity;
🔹 方法 2:按数据库分组统计连接数
SELECT
datname AS database_name,
COUNT(*) AS connection_count
FROM pg_stat_activity
GROUP BY datname
ORDER BY connection_count DESC;
🔹 方法 3:按用户分组统计连接数
SELECT
usename AS username,
COUNT(*) AS connection_count
FROM pg_stat_activity
GROUP BY usename
ORDER BY connection_count DESC;
🔹 方法 4:区分活跃/空闲连接
SELECT
state,
COUNT(*) AS count
FROM pg_stat_activity
GROUP BY state
ORDER BY count DESC;
active:正在执行查询idle:连接空闲(事务已结束)idle in transaction:事务中但无操作(需警惕长事务)idle in transaction (aborted):事务中发生错误
🔹 方法 5:查看连接上限及使用率
SELECT
current_setting('max_connections') AS max_connections,
(SELECT COUNT(*) FROM pg_stat_activity) AS current_connections,
ROUND(
100.0 * (SELECT COUNT(*) FROM pg_stat_activity)
/ current_setting('max_connections')::int,
2
) AS usage_percent;
🔹 方法 6:命令行快速查看(psql)
# 总连接数
psql -c "SELECT COUNT(*) FROM pg_stat_activity;"
# 详细列表(含数据库、用户、状态)
psql -c "SELECT pid, usename, datname, state, query FROM pg_stat_activity;"
🔹 ⚠️ 注意事项
- 权限要求:普通用户只能看到自己的连接,需
pg_read_all_stats角色或超级用户权限查看全部连接。 - 连接泄漏排查:
-- 查找空闲超过 10 分钟的连接(可能泄漏) SELECT pid, usename, datname, state, query_start, NOW() - query_start AS idle_time FROM pg_stat_activity WHERE state = 'idle' AND NOW() - query_start > INTERVAL '10 minutes' ORDER BY idle_time DESC; - 终止异常连接(谨慎操作):
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state = 'idle' AND NOW() - query_start > INTERVAL '1 hour';
🔹 补充:监控建议
- 将连接数监控纳入 Prometheus + Grafana(使用
pg_stat_activity指标) - 设置告警阈值(如连接数 >
max_connections * 0.8) - 应用层使用连接池(如 PgBouncer)避免连接数耗尽
💡 您当前配置的
max_connections = 500(根据您上传的配置文件),建议日常使用保持在 70% 以下,预留应急空间。
活到老,学到老。

浙公网安备 33010602011771号