Гайд 1С: Настройка пула соединений СУБД в кластере серверов 1С
- Ошибка
Превышено максимальное количество соединений с СУБД(Too many connections). - Высокие накладные расходы времени на постоянное открытие и закрытие TCP-сессий с сервером базы данных.
- Всплески задержек при старте тяжелых фоновых заданий или регламентных процедур.
- Зависание соединений в состоянии
idle in transactionна стороне PostgreSQL.
1. Архитектура и параметры пула соединений 1С
Кластер серверов 1С (процессы rphost) удерживает постоянный пул соединений к СУБД для повторного использования пользовательскими сессиями. Тонкая настройка осуществляется через параметры информационной базы в консоли администрирования или свойства кластера:
- Количество соединений на процесс: Регулируется распределением рабочих процессов и числом информационных баз на кластер.
- Время жизни неиспользуемого соединения: Очистка соединений, находящихся в спящем режиме.
2. Настройка параметров PostgreSQL под пул 1С
В файле postgresql.conf установите согласованные лимиты соединений:
# Максимальное число физических соединений от всех rphost + админка
max_connections = 500
# Таймаут удержания неактивных транзакций (защита от зависших сессий 1С)
idle_in_transaction_session_timeout = 600000 # 10 минут
# Контроль сетевого канала TCP
tcp_keepalives_idle = 60
tcp_keepalives_interval = 10
tcp_keepalives_count = 53. Тюнинг пула в MS SQL Server
В свойствах экземпляра SQL Server (Connections) проверьте значение Max number of concurrent connections (должно быть установлено в 0 — неограниченно, регулируется лицензиями и ресурсами).
Частые вопросы (FAQ)
Почему нельзя ставить max_connections в PostgreSQL с большим запасом (например, 5000)?
Каждое подключение в PostgreSQL — это отдельный процесс ОС, потребляющий фиксированный объем RAM под структуры и снижающий эффективность работы планировщика ядра при обходе таблицы блокировок procArray.
Как рассчитывается оптимальное значение max_connections для 1С?
Формула: (Количество активных rphost * Пул на процесс [обычно 30-50]) + 30 технических соединений для фоновых служб и мониторинга.
Нужно ли использовать внешний PgBouncer перед 1С?
Нет. Платформа 1С:Предприятие реализует собственный высокоэффективный внутренний пул соединений в коде rphost. Использование PgBouncer в режиме transaction pool ломает работу временных таблиц 1С (#tt), а в режиме session pool не дает преимуществ.
Как принудительно сбросить подвисшие соединения к СУБД из консоли 1С?
В консоли администрирования кластера откройте ветку 'Информационные базы' -> 'Соединения', отсортируйте по времени простоя и удалите зависшие неактивные сеансы через контекстное меню.