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 →