DBAtlas · 数据库运维图谱

连接风暴(连接过多)

出现了 'too many connections'、'remaining connection slots reserved' 或 ORA-00018;新连接被拒绝。找到来源,立即缓解压力,并彻底修复。

评估现状:有多少连接,其中多少是活动的?

先看连接总数、上限以及活动/空闲的比例。

SELECT status, COUNT(*) FROM v$session WHERE type='USER' GROUP BY status;
SELECT name, value FROM v$parameter WHERE name IN ('processes','sessions');
  • 大多数连接是 idle / idle in transaction
  • 大多数是活动连接;需要找出来源

是谁/来自哪里?按来源对连接分组

通常是某台应用服务器的连接池暴涨或存在连接泄漏。按主机/用户/应用查看分布。

SELECT client_addr, usename, application_name, count(*) FROM pg_stat_activity GROUP BY 1,2,3 ORDER BY 4 DESC;
  • 某个应用/主机让连接数暴涨(连接池)
  • 负载确实增加了;所有连接都是合法且活动的

根本原因:空闲连接堆积/泄漏

连接被打开后从不关闭,或停留在 'idle in transaction';白白占用连接槽。

根本原因:应用连接池暴涨

某台应用服务器的连接池没有上限/过大或存在泄漏。连接就是它产生的。

根本原因:负载确实增加

连接是合法且活动的;容量确实不足。

在 DBAtlas 中打开 →