Как оптимизировать работу Windows и MS SQL Server для максимальной производительности 1С

Системный администратор IT и автоматизация бизнеса
← На главную

При настройке высоконагруженных систем на базе 1С и MS SQL Server системные администраторы часто сталкиваются с необходимостью тонкой настройки операционной системы и СУБД. В этой статье мы подробно разберем, как правильно распределить ресурсы процессора, настроить безопасность памяти и подготовить дисковую подсистему, чтобы добиться максимального быстродействия, особенно в условиях виртуализации.

Оптимизация распределения времени процессора: Программы или Службы?

Разберем фундаментальный вопрос настройки быстродействия Windows. В параметрах системы (Дополнительно — Быстродействие — Распределение времени процессора) доступно два режима: Оптимизировать работу программ или Оптимизировать работу служб. Проанализируем ситуацию: SQL Server технически является процессом sqlserver.exe, но запускается он как системная служба Windows.

Для серверных решений, где основной задачей является работа СУБД, необходимо выбирать вариант «Оптимизировать работу служб» (Background Services). Рассмотрим подробнее, почему это важно:

  1. Кванты времени: В режиме «Программ» Windows выделяет короткие и переменные кванты времени для активного окна. Это делает интерфейс отзывчивым, но создает огромные накладные расходы на переключение контекста (context switching) для фоновых процессов.
  2. Стабильность потоков: В режиме «Служб» кванты становятся длинными и фиксированными. Для MS SQL Server это критично: процессор дольше занимается выполнением тяжелого запроса 1С, не отвлекаясь на обслуживание интерфейса, что напрямую повышает производительность.
  3. Приоритет планировщика: Планировщик Windows в этом режиме отдает безусловный приоритет процессам, не имеющим фокуса ввода. Это идеальный сценарий для сервера СУБД.

Предотвращение выполнения данных (DEP) и его влияние

Функция DEP (Data Execution Prevention) — это технология безопасности, которая помечает области памяти как «неисполняемые». Выясним причину, по которой ее не стоит включать для всех программ на сервере 1С/SQL.

Стандартная рекомендация: включать DEP только для основных служб и программ Windows. Если активировать DEP для всех программ, вы можете столкнуться со следующими проблемами:

Настройка памяти: Файл подкачки и Lock Pages in Memory

Вопрос размера файла подкачки (pagefile) часто вызывает споры. С одной стороны, обработка в ОЗУ быстрее, с другой — Windows требует наличия свопа для корректной работы. Разберем по шагам правильную стратегию управления памятью.

1. Закрепление страниц в памяти (Lock Pages in Memory). Это одна из важнейших настроек для SQL Server. По умолчанию Windows может «сбрасывать» буферный кэш SQL в файл подкачки, если решит, что другой процесс (например, резервное копирование) нуждается в памяти. Это приводит к катастрофическому падению производительности 1С.

Чтобы этого избежать, выполним следующие действия:

  1. Запустим secpol.msc (Локальная политика безопасности).
  2. Перейдем в Локальные политики — Назначение прав пользователя.
  3. Найдем пункт Lock pages in memory (Закрепление страниц в памяти).
  4. Добавим туда учетную запись, под которой запускается служба MSSQLSERVER.

2. Размер файла подкачки. Если у вас большой объем ОЗУ (например, 40 ГБ и выше), нет необходимости создавать файл подкачки размером 1.5 от ОЗУ. Рассмотрим рекомендации:

Виртуализация на Proxmox: Тонкие настройки для 1С

Использование гипервизора Proxmox (KVM) накладывает свои особенности. Посмотрим на важные параметры виртуальной машины, которые влияют на скорость работы SQL:

  1. Тип CPU: В настройках VM всегда выставляем тип процессора Host. Это позволяет гостевой ОС использовать все инструкции физического процессора (AES, AVX), что критично для криптографии и математических расчетов в 1С.
  2. Memory Ballooning: Обязательно отключаем драйвер ballooning. Этот механизм позволяет гипервизору динамически забирать память у гостя. Для SQL Server это недопустимо — память должна быть жестко зарезервирована (Fixed RAM).
  3. Дисковая подсистема: Используем контроллер virtio-scsi-single и включаем опцию iothread. Это обеспечивает многопоточную обработку ввода-вывода, приближая производительность виртуальных дисков к физическим.

Архитектурное решение: Shared Memory и соседство 1С и SQL

Проанализируем ситуацию с разделением серверов. Часто админы разносят сервер 1С и сервер SQL на разные виртуальные машины. Однако, если ресурсы позволяют, установка «все на одном сервере» дает существенный плюс — использование протокола Shared Memory.

Shared Memory позволяет серверу 1С и SQL обмениваться данными напрямую через оперативную память, полностью минуя сетевой стек (даже виртуальный). Это сокращает задержки (latency) при передаче данных. На тяжелых отчетах 1С прирост производительности может достигать 20%.

Если же серверы разделены, обмен идет по протоколу TCP/IP, что добавляет накладные расходы на инкапсуляцию пакетов и работу виртуальных сетевых адаптеров.

Режим электропитания: Высокая производительность

Рассмотрим момент, который часто упускают. По умолчанию в Windows (и в BIOS физического сервера) часто стоит сбалансированный режим энергопотребления. Для 1С это «яд».

Необходимо выставить план «Высокая производительность» (High Performance):

Если процессор будет постоянно менять частоту, пытаясь сэкономить энергию, задержки в работе 1С станут непредсказуемыми.

Подводя итог, оптимизация — это комплекс мер. Правильное распределение квантов времени процессора в пользу служб, фиксация памяти за SQL Server и отказ от динамического распределения ресурсов в гипервизоре позволят вашей системе 1С работать максимально эффективно.

← На главную