PostgreSQL отвечает, открытые сессии работают, но приложение периодически получает подк... — 6 июля 2026 г. в 11:00:06.775
PostgreSQL отвечает, открытые сессии работают, но приложение периодически получает подключения: FATAL: remaining connection slots are reserved... Снаружи это похоже на «база недоступна». На практике новые подключения могут не проходить, потому что доступные connection slots закончились или остались только зарезервированные. Условный агрегированный фрагмент по pg_stat_activity: app user client state count oldest web-api app 10.0.4.21 idle 96 01:12:40 web-api app 10.0.4.22 idle 88 00:54:18 web-api app 10.0.4.21 idle in transaction 12 00:31:05 worker app 10.0.4.31 active 7 00:02:11 admin dba 10.0.4.10 active 1 00:00:08 count и oldest здесь рассчитаны для примера. В реальной диагностике смотрят исходные поля: application_name, usename, client_addr, backend_start, xact_start, state_change, state. Что важно: active — сессия выполняет запрос. idle — сессия ждёт следующую команду клиента. Для пула подключений это может быть нормально. idle in transaction — транзакция открыта, но запрос сейчас не выполняется. Это тревожный сигнал: такая сессия может удерживать locks и мешать vacuum, но последствия нужно проверять по возрасту транзакции и сценарию. Диагностическая развилка: — много соединений от одного application_name → проверяем pool size и число экземпляров приложения; — много idle → выясняем, ожидаемо ли это для пула; — есть долгие idle in transaction → ищем код, который открыл транзакцию и не завершил её; — соединения идут от одного клиента или сервиса → проверяем утечки, ретраи и изменения после релиза; — лимит действительно мал → пересматриваем max_connections планово, с учётом памяти, пула и реальной нагрузки. Типичная ошибка — сразу увеличить max_connections. Это может временно снять симптом, но не объяснит, кто занял слоты, почему соединения не освобождаются и соответствует ли пул подключений лимиту PostgreSQL. Массово завершать сессии без понимания владельца и последствий тоже опасно: можно оборвать рабочий сценарий или откатить транзакцию. Практический вывод: если база жива, но новые подключения не проходят, начинайте с карты соединений: приложение, пользователь, адрес клиента, состояние сессии, возраст подключения и возраст транзакции. #УЦФОРС #PostgreSQL #DBA #АдминистрированиеБД #DevOps

