Многие администраторы высоконагруженных систем 1С сталкиваются с классической проблемой: один пользователь запускает формирование объемного и сложного отчета, после чего сервер СУБД блокируется, транзакции зависают, а сеансы остальных пользователей начинают отваливаться. Возникает логичный вопрос — можно ли жестко разделить ресурсы сервера (процессор, оперативную память) между пользователями в равных долях или установить лимит, например, не более 50% мощности на одного юзера?
Давайте подробно разберем эту ситуацию, проанализируем ошибки в архитектуре и рассмотрим современные, правильные способы балансировки нагрузки и ограничения аппетитов «тяжелых» сеансов.
Проанализируем типичный пример: имеется сервер с процессором Xeon 5218R и 128 ГБ оперативной памяти. На нем развернуты базы 1С, СУБД (SQL Server) и работают около 500 пользователей (большая часть — через RDP на этом же или соседних серверах). В такой конфигурации проблема кроется в критической нехватке аппаратных ресурсов.
Один терминальный сеанс RDP с запущенным клиентом 1С потребляет в среднем 300–500 МБ оперативной памяти. На обслуживание 400–500 пользователей только для RDP-сессий потребуется от 150 до 250 ГБ ОЗУ. При наличии всего 128 ГБ сервер неизбежно уходит в жесткий свопинг (использование файла подкачки на диске), что парализует работу и сервера 1С, и СУБД.
Что необходимо сделать в первую очередь:
Ранее для ограничения потребления ресурсов процессами в Windows использовали утилиту WSRM. Однако эта технология признана устаревшей и удалена из современных версий Windows Server. Правильный подход — ограничивать нагрузку непосредственно на уровне СУБД.
В MS SQL Server есть встроенный мощный инструмент — Resource Governor (Регулятор ресурсов). С его помощью мы распределим входящие сессии по специальным пулам ресурсов. Мы сможем:
Если блокировки транзакций у скульника происходят из-за чтения огромных массивов данных, лучшим решением будет использование встроенного в платформу 1С:Предприятие 8.3 (начиная с версии 8.3.14) механизма репликации — Механизм копий баз данных (подобно архитектуре CQRS).
Разберем алгоритм настройки:
Вместо попыток поделить ресурсы между пользователями, мы настроим ограничения в консоли администрирования кластера 1С. Платформа имеет отличные встроенные механизмы балансировки рабочих процессов rphost.
Параметры рабочих процессов:
rphost. Если пользователь запустит отчет, который начнет неконтролируемо съедать всю оперативную память, кластер 1С принудительно завершит этот процесс по достижении лимита. Сеанс виновника прервется, но весь сервер не зависнет.Искать, кто именно повесил базу, через обычный Журнал регистрации — задача бессмысленная. Журнал регистрации показывает только бизнес-события. Для глубокого анализа производительности мы применим Технологический журнал (ТЖ).
Настроим сбор логов ТЖ на следующие события:
TTIMEOUT и TLOCK — для отслеживания таймаутов и ожиданий на управляемых блокировках.DBMSSQL — для фиксации долгих запросов к СУБД.Проанализировав логи ТЖ, мы точно установим имя пользователя, название отчета, текст SQL-запроса и время его выполнения. Это даст нам четкое понимание, какую часть кода необходимо передать программистам на оптимизацию.
Поскольку подавляющее большинство пользователей (около 475 человек) работает через удаленный рабочий стол, мы должны жестко регламентировать их сеансы через групповые политики (GPO) Windows Server:
Подводя итог: делить ресурсы "поровну" на сервере 1С невозможно и нецелесообразно. Проблема решается комплексным подходом — наращиванием памяти, правильной балансировкой в кластере 1С, использованием MS SQL Resource Governor, настройкой механизма копий баз данных для аналитики и грамотной настройкой терминальных серверов.