连接风暴(连接过多)
出现了 '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';白白占用连接槽。
根本原因:应用连接池暴涨
某台应用服务器的连接池没有上限/过大或存在泄漏。连接就是它产生的。
根本原因:负载确实增加
连接是合法且活动的;容量确实不足。