Ошибка PostgreSQL: FATAL: too many connections for role в 1С
При входе пользователей в 1С или во время массового запуска фоновых регламентных заданий появляется сообщение об ошибке:
FATAL: too many connections for role "postgres" (или "usr1cv8")- Новые пользователи не могут подключиться к базе, 1С вылетает при старте.
- В журнале PostgreSQL регистрируются критические ошибки исчерпания пула соединений.
- Сервер перегружен неактивными сессиями рабочих процессов
rphost.
Шаг 1. Снятие персонального лимита подключений для пользователя БД
Подключитесь к СУБД через утилиту pgAdmin или командную строку psql и выполните запрос:
ALTER ROLE usr1cv8 CONNECTION LIMIT -1;
ALTER ROLE postgres CONNECTION LIMIT -1;Значение -1 снимает индивидуальное ограничение на количество одновременных подключений для данной роли.
Шаг 2. Увеличение глобального параметра max_connections
- Найдите конфигурационный файл
postgresql.conf(в Linux:/var/lib/pgsql/data/postgresql.confили/etc/postgresql/..., в Windows: в папке установки PostgreSQL/data). - Откройте файл в текстовом редакторе и найдите строку
max_connections. - Увеличьте значение (например, с
100до300или500в зависимости от количества пользователей):max_connections = 300 - Сохраните файл и перезапустите службу PostgreSQL:
# Linux: systemctl restart postgresql-14 # Windows (через PowerShell от Администратора): Restart-Service postgresql*
Шаг 3. Ограничение спящих сеансов на стороне кластера 1С
В консоли администрирования 1С откройте свойства кластера и настройте таймауты:
- Время засыпания пассивных сеансов:
1200сек (20 минут). - Время завершения спящих сеансов:
86400сек (или меньше при нехватке памяти).
Частые вопросы (FAQ)
Почему 1С создает так много подключений к PostgreSQL?
Каждый рабочий процесс rphost и каждое отдельное фоновое задание в 1С открывает собственный пул соединений с базой данных PostgreSQL для параллельной обработки запросов.
Можно ли просто поставить max_connections = 5000?
Нет, каждое соединение в PostgreSQL резервирует оперативную память (work_mem и системные буферы). Слишком большое число приведет к исчерпанию RAM и аварийному падению СУБД.
Как посмотреть, сколько соединений занято прямо сейчас?
Выполните SQL-запрос: SELECT count(*), usename FROM pg_stat_activity GROUP BY usename;
Нужно ли перезагружать сервер 1С после изменения postgresql.conf?
Сам сервер 1С перезагружать не обязательно, но перезапуск службы PostgreSQL строго необходим, так как параметр max_connections применяется только при старте сервера баз данных.