При переходе с физического сервера на виртуальную среду Hyper-V многие технические специалисты сталкиваются с неприятным сюрпризом: производительность системы 1С может упасть в 2–3 раза, даже если аппаратные ресурсы (процессор, память, диски) идентичны. Особенно это заметно на операциях, критичных к задержкам одного потока (загрузка баз из .dt, проведение тяжелых документов, расчеты). В этой статье мы подробно разберем, как минимизировать это «пенальти на виртуализацию» и максимально приблизить скорость работы в VM к показателям физического сервера.
Рассмотрим ситуацию: у нас есть два идентичных сервера на базе процессора Intel Core i9 9900K с NVMe SSD. На одном 1С работает «на железе», на другом — внутри Hyper-V. Если файловая база в виртуальной среде работает почти так же быстро, как на физической, а SQL-версия замедляется в разы, значит, корень проблемы кроется в управлении ресурсами между гипервизором, гостевой ОС и SQL-сервером. Разберем пошагово, как устранить узкие места. Для комплексной диагностики оборудования и тестирования инфраструктуры пригодится утилита тестирования сервера 1С.
Это самый важный и первый шаг. Hyper-V перехватывает управление питанием процессора. Если на физическом хосте или в виртуальной машине включены режимы энергосбережения, процессор не будет успевать выходить на пиковые частоты Turbo Boost при кратковременных нагрузках 1С. 1С — это «взрывная» нагрузка: процессор должен мгновенно выдавать максимум и так же быстро засыпать. Задержки при переключении состояний (C-States) в виртуальной среде кратно увеличиваются.
Что необходимо сделать:
C-States, SpeedStep и EIST.В Windows Server 2019 по умолчанию используется Core Scheduler. Он обеспечивает высокую безопасность (защита от атак типа Spectre), выделяя виртуальной машине целые физические ядра. Однако для 1С, чувствительной к частоте и количеству потоков, это может стать узким местом.
Проанализируем распределение vCPU. Если у процессора 8 физических ядер и 16 потоков (Hyper-threading), выделение 16 vCPU виртуальной машине может привести к избыточному контекстному переключению. Попробуйте выделить ровно столько vCPU, сколько физических ядер у процессора (в нашем случае — 8). Это исключит конкуренцию за ресурсы внутри одного физического ядра между потоками виртуальной машины.
Для изменения типа планировщика на «Классический» (если вы уверены в безопасности среды и хотите выжать максимум из SMT), можно использовать команду в PowerShell на хосте:
Set-WinHyperVConfig -SchedulerType Classic
После выполнения команды требуется перезагрузка хоста. Это позволит гипервизору более гибко распределять задачи по логическим процессорам.
Многие полагают, что использование Pass-through дисков (прямой проброс физического диска в VM) значительно быстрее, чем VHDX. Однако на современных системах разница составляет не более 2–10%. Основная проблема часто кроется в несоответствии размера сектора.
Проанализируем ситуацию: современные NVMe SSD работают с физическим сектором 4K. Если ваш виртуальный диск VHDX был создан с логическим сектором 512 байт (512e), возникает эффект «read-modify-write», который катастрофически замедляет запись логов транзакций SQL Server.
Наши рекомендации:
Если сервер 1С и SQL Server установлены внутри одной виртуальной машины, разберем, как они «общаются». По умолчанию может использоваться протокол TCP/IP. В Hyper-V это означает, что пакеты проходят через виртуальный сетевой коммутатор (Virtual Switch), что вносит задержки в миллисекунды. Для 1С, которая делает тысячи мелких запросов к базе, это критично.
Как оптимизировать:
SQL Server Configuration Manager включите протокол Shared Memory.(local) или просто . (точку). Это заставит систему использовать протокол общей памяти, минуя сетевой стек.В Windows Server 2019 по умолчанию могут быть включены функции «Целостность памяти» (Memory Integrity) и «Защита на основе виртуализации» (VBS). Эти технологии создают дополнительный слой абстракции, который может замедлять системные вызовы 1С и SQL на 20–30%.
Рассмотрим необходимость их отключения в закрытом контуре. Если сервер предназначен только для 1С, отключение HVCI в настройках безопасности Windows может вернуть значительную часть производительности. Также не забудьте добавить в исключения антивируса (даже встроенного Windows Defender):
rphost.exe, rmngr.exe, sqlservr.exe..mdf, .ldf, .vhdx.Для стабильной работы SQL Server в VM важно предотвратить «вымывание» его кэша из оперативной памяти. Hyper-V может динамически перераспределять память, что губительно для SQL. Для детальной проверки настроек и узких мест базы данных пригодится обработка для анализа SQL-сервера.
Выполним следующие настройки:
Как показывает практика некоторых администраторов, отключение Hyper-threading (SMT) в BIOS физического сервера может дать прирост производительности 1С в виртуальной среде. Это связано с тем, что 1С — это однопоточная нагрузка в рамках одного серверного вызова. Когда гипервизор отдает виртуальной машине «логический поток» вместо «физического ядра», производительность падает. Если после всех настроек скорость не устраивает — попробуйте отключить Hyper-threading и выделить в VM все оставшиеся физические ядра.
Проанализировав все вышеперечисленные факторы, мы видим, что «пенальти» за виртуализацию можно сократить с 50–60% до приемлемых 10–15%, что является стандартом для индустрии. Главное — обеспечить SQL-серверу и 1С стабильные, не разделяемые с хостом ресурсы и максимально «спрямить» пути прохождения данных от процессора к дискам. После завершения перехода на виртуальную среду для контроля целостности данных выполняется автоматическая сверка проводок между базами.