При совместной работе кластера серверов 1С:Предприятие и MS SQL Server системные администраторы часто сталкиваются с ситуацией, когда физическая память сервера непрерывно заполняется и процесс СУБД sqlservr.exe забирает практически весь доступный объем RAM. Это приводит к замедлению работы пользователей, вытеснению процессов 1С в файл подкачки и нестабильности системы. Разберем детально, почему так происходит, какие настройки являются ошибочными и как правильно сконфигурировать серверную инфраструктуру.
Для начала проанализируем архитектурную особенность MS SQL Server. По своей природе СУБД стремится занять всю память, выделенную ей настройкой max server memory. Это поведение является штатным и преследует цель максимального кэширования данных в оперативной памяти (буферный пул), чтобы минимизировать медленные операции чтения с диска. Однако в условиях работы с 1С возникают две специфические проблемы:
CACHESTORE_SQLCP), вытесняя полезные данные из буферного пула.rphost) и процесс sqlservr.exe начинают бороться за свободную память ОС. Если СУБД заняла всю память, процессы 1С при пиковых нагрузках начинают сбрасываться в своп (paging), что вызывает резкие системные зависания.Рассмотрим параметры SQL Server, ручное изменение которых часто приводит к деградации производительности:
rphost, rmngr), провоцируя тайм-ауты и сбои соединений. Опцию необходимо отключить.0 (автоматический расчет).Разберем по шагам, как правильно распределить память и настроить СУБД для стабильной работы с базами 1С.
rphost с учетом пиковых нагрузок). Оставшийся объем задаем параметру max server memory (MB).
EXEC sys.sp_configure N'show advanced options', N'1';
RECONFIGURE WITH OVERRIDE;
EXEC sys.sp_configure N'max server memory (MB)', 98304; -- Пример для лимита в 96 ГБ
RECONFIGURE WITH OVERRIDE;
optimize for ad hoc workloads заставляет SQL Server при первом выполнении запроса сохранять в кэше только компактную заглушку (plan stub), а полный план сохранять только при повторных обращениях. Это освобождает десятки гигабайт памяти в базах 1С.
EXEC sys.sp_configure N'optimize for ad hoc workloads', 1;
RECONFIGURE WITH OVERRIDE;
Max degree of parallelism (MAXDOP) в значение 1, чтобы исключить взаимные блокировки потоков при выполнении запросов:
EXEC sys.sp_configure N'max degree of parallelism', 1;
RECONFIGURE WITH OVERRIDE;
DBCC FREESYSTEMCACHE('SQL Plans');
Эта команда освобождает память от неиспользуемых планов, сохраняя закэшированные страницы данных в буферном пуле.Проанализируем параметры кластера 1С, которые позволяют защитить сервер от утечек памяти в сеансах пользователей. В свойствах кластера и рабочих серверов через консоль администрирования или утилиту rac настроим следующие ограничения:
rphost и плавно перезапустит устаревшие.rphost, ограничив количество сеансов на каждый процесс, чтобы изолировать потенциальные утечки памяти в рамках отдельных сессий.Если после выполнения всех настроек сервер продолжает испытывать нехватку ресурсов, наилучшим решением станет физическое или виртуальное разделение ролей: вынос рабочего сервера 1С и СУБД MS SQL Server на две отдельные машины. Это полностью исключит взаимную конкуренцию за оперативную память и дисковую подсистему.