При проектировании сервера для 64-разрядной платформы 1С:Предприятие 8.3 системные администраторы и разработчики часто сталкиваются с вопросом выбора оптимального сочетания операционной системы и системы управления базами данных (СУБД). Неправильный выбор версий или использование стандартных настроек «из коробки» нередко приводит к труднообъяснимым задержкам при выполнении операций, даже если физическое оборудование загружено лишь на небольшую часть своей мощности.
В этой статье мы подробно разберем, какие версии Windows Server и MS SQL Server обеспечивают наибольшую стабильность и быстродействие, проанализируем изменения в алгоритмах оптимизатора запросов Microsoft SQL, изучим обязательный чек-лист настройки СУБД под 1С и выясним причины специфических проблем производительности при работе в виртуальной среде Citrix XenServer.
Рассмотрим характеристики разных поколений операционных систем и СУБД Microsoft с точки зрения их совместимости и производительности с 1С:Предприятие 8.3.
1. Операционная система Windows Server:
ragent платформы 1С. При этом стоит учитывать, что официальный цикл поддержки данной ОС также завершен.2. СУБД Microsoft SQL Server:
Cardinality Estimator, а также встроенная технология In-Memory OLTP. Обратите внимание: технология In-Memory OLTP требует специального проектирования структуры таблиц на уровне DDL, поэтому сама платформа 1С «из коробки» ее не использует.Query Store). Это отличный выбор для современных конфигураций 1С, при условии грамотной настройки уровня совместимости базы данных.Начиная с версии MS SQL Server 2014, Microsoft внедрила новый модуль оценки количества строк (Cardinality Estimator). Платформа 1С динамически формирует сложные SQL-запросы с множеством временных таблиц и вложенных соединений. Новый оптимизатор в некоторых ситуациях некорректно рассчитывает стоимость планов запросов, выбирая неоптимальные индексы или операции Nested Loops вместо Hash Match.
В результате пользователи 1С сталкиваются с сильным замедлением проведения документов или формирования отчетов. Чтобы вернуть высокую скорость выполнения запросов без отката на старые версии SQL Server, мы можем переключить базу данных 1С на использование прежнего алгоритма оценки строк.
Для базы данных MS SQL 2016 и новее выполним следующий SQL-скрипт в среде Management Studio:
ALTER DATABASE [Имя_Базы_1С]
SET LEGACY_CARDINALITY_ESTIMATION = ON;
GO
Если используется MS SQL Server 2014, переключение на классический оптимизатор выполняется с помощью флага трассировки 9481 в параметрах запуска службы SQL Server или на уровне параметров конкретной базы данных.
По умолчанию MS SQL Server настроен как универсальный сервер для разнородных нагрузок. Для эффективной работы с платформой 1С:Предприятие требуется выполнить ряд специфических системных настроек.
1. Ограничение максимального объема памяти (Max Server Memory)
Если служба MS SQL Server и сервер приложений 1С (служба ragent) расположены на одной физической или виртуальной машине, SQL Server со временем заберет всю доступную оперативную память. Это вызовет уход операционной системы и процессов 1С в файл подкачки (swapping). Необходим жесткий лимит для SQL Server, с сохранением минимум 4–8 ГБ RAM для ОС и процессов 1С.
Изменим параметр max server memory через SQL-запрос:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'max server memory (MB)', 28672; -- Пример: выделили 28 ГБ из 32 ГБ
RECONFIGURE;
GO
2. Настройка параллелизма (MAXDOP и Cost Threshold for Parallelism)
Значение параметра Max Degree of Parallelism (MAXDOP) по умолчанию равно 0, что заставляет SQL Server параллелить любые тяжелые запросы на все ядра процессора. В 1С это часто ведет к взаимоблокировкам и повышенным ожиданиям типа CXPACKET.
MAXDOP = 1.MAXDOP выбирается в пределах от 2 до 4 (но не более количества ядер в одном NUMA-узле).Cost Threshold for Parallelism следует поднять со стандартного значения 5 до 30–50, чтобы мелкие запросы 1С не расходовали ресурсы на организацию параллельных потоков.
EXEC sp_configure 'max degree of parallelism', 1;
GO
EXEC sp_configure 'cost threshold for parallelism', 50;
GO
RECONFIGURE;
GO
3. Блокировка страниц в памяти (Lock Pages in Memory)
Предоставим учетной записи, от имени которой запущена служба MS SQL Server, право Lock Pages in Memory в локальной политике безопасности Windows (gpedit.msc -> Конфигурация Windows / Настройки безопасности / Локальные политики / Назначение прав пользователя). Это защитит оперативную память SQL Server от сброса на диск при нехватке памяти в системе.
4. Мгновенная инициализация файлов (Instant File Initialization)
Предоставим службе SQL Server право Perform Volume Maintenance Tasks (Выполнение задач по обслуживанию томов). Это позволит оперативно расширять файлы данных .mdf без предзаполнения выделенного пространства нулями.
5. Оптимизация служебной базы TempDB
Служебная база TempDB активно используется 1С для работы с временными таблицами. Разделим базу TempDB на несколько файлов данных равного размера (число файлов должно соответствовать количеству выделенных vCPU, но не более 8) и разместим их на самых быстрых дисках (NVMe / SSD).
Часто в инфраструктуре компании сервер приложений 1С и MS SQL Server размещаются внутри виртуальных машин под управлением гипервизора Citrix XenServer (XCP-ng). При этом наблюдается характерный симптом: аппаратные ресурсы (CPU, RAM, Disk) не загружены и на 30%, но пользователи 1С жалуются на медленный отклик и торможение интерфейса.
Проанализируем основные причины этой проблемы и способы их устранения.
1. Управление питанием процессора (CPU Power Management)
По умолчанию физический сервер и гипервизор XenServer включают режим энергосбережения. При отсутствии массовой нагрузки тактовая частота ядер CPU снижается. Платформа 1С критически зависима от однопоточной производительности процессора (тактовой частоты одного ядра).
Для исправления ситуации выполним следующие шаги:
CPU Governor в режим performance с помощью команд управления гипервизором:
xenpm set-scaling-governor performance
2. Архитектура NUMA и конфигурация vCPU
Рассмотрим пример физического сервера HP ProLiant DL380p Gen8 с двумя процессорами Intel Xeon E5-2667 v2 (по 8 ядер на сокет). В такой системе присутствуют два узла NUMA, каждый из которых связан со своей локальной оперативной памятью.
Если выделить виртуальной машине, к примеру, 12 vCPU, она неизбежно пересечет границы одного NUMA-узла. В результате часть запросов к оперативной памяти будет выполняться через межпроцессорную шину (QPI/UPI), что добавляет микрозадержки при обращении к RAM. Для баз данных MS SQL и серверов 1С эти задержки вызывают заметное падение скорости работы.
Правило конфигурации: объем виртуальных ядер (vCPU) для виртуальной машины с 1С и MS SQL не должен превышать количество физических ядер одного процессора (в нашем примере — не более 8 vCPU на одну виртуальную машину).
3. Выделение памяти и переподписка (Overcommit)
Для виртуальных машин с MS SQL Server и сервером приложений 1С строго запрещено использовать динамическое распределение памяти (Dynamic Memory / Ballooning). Все ресурсы RAM должны быть жестко зарезервированы под виртуальную машину в полном объеме (100% Reservation).
При использовании серверов HP ProLiant (например, с контроллером HP Smart Array P420i) критически важным фактором является состояние модуля кэш-памяти FBWC/BBWC (Flash-Backed / Battery-Backed Write Cache).
Если аккумулятор батареи кэша вышел из строя или отсутствует, контроллер Smart Array в целях безопасности данных полностью отключает кэширование на запись (Write Cache). Скорость случайных операций записи (файлы журнала транзакций .ldf и операции с TempDB) снижается в десятки раз, превращая работу 1С в непрерывное ожидание диска.
Администратору необходимо регулярно проверять через утилиту HPSSACLI или SSA состояние батареи кэш-модуля и соотношение кэша на чтение/запись (рекомендуется выставлять соотношение 25% Read / 75% Write или 50%/50%).
Поведем итоги по построению высокопроизводительного сервера 1С:
LEGACY_CARDINALITY_ESTIMATION в положение ON и настройте параметры MAXDOP, Max Server Memory и права службы SQL в ОС.