Ошибка 53300 в PostgreSQL (too_many_connections) означает, что достигнут предел одновременных подключений к серверу и новое соединение отклонено. Полный текст: FATAL: sorry, too many clients already. Лимит задается параметром max_connections, часть слотов при этом зарезервирована под суперпользователя.
Частые причины
- Значение max_connections слишком мало для реальной нагрузки.
- Приложение не закрывает соединения или работает без пула – коннекты копятся.
- Множество сессий в состоянии idle in transaction удерживают слоты.
- Резкий рост числа воркеров или экземпляров приложения.
Как исправить ошибку 53300
- Посмотрите текущие подключения и их состояние:
SELECT count(*), state FROM pg_stat_activity GROUP BY state;
- Найдите и при необходимости завершите зависшие сессии idle in transaction:
SELECT pid, state, query_start FROM pg_stat_activity WHERE state = 'idle in transaction';
- Поднимите лимит в postgresql.conf – изменение max_connections требует перезапуска сервера:
max_connections = 200
- Устойчивое решение при высокой нагрузке – пул соединений (PgBouncer) вместо простого повышения лимита: каждое подключение расходует память, и рост max_connections не бесплатен.
Исчерпание лимита подключений обычно проявляется скачком числа сессий под нагрузкой, а к моменту разбора данные в pg_stat_activity уже неактуальны – состояние отражает только текущий момент. PGLens сохраняет историческую динамику числа и состояния соединений в отдельной базе, что дает основу для анализа причин случившегося сбоя и поиска приложений, не закрывающих коннекты.