Вопрос модернизации серверного оборудования для нужд 1С часто сводится к замене традиционных жестких дисков (HDD или «спиннеров») на твердотельные накопители (SSD). Однако в высоконагруженных системах, работающих на связке MSSQL + VMware + 1C, дисковая подсистема — это лишь одна из составляющих производительности. Рассмотрим подробно, как правильно подойти к ускорению системы, почему дорогие Enterprise SSD могут не решить проблему «медленных отчетов» и на какие настройки стоит обратить внимание в первую очередь.
В рассматриваемой ситуации мы имеем базу данных объемом около 70 ГБ, которая практически полностью умещается в выделенную оперативную память (90 ГБ). Проанализируем этот момент: если SQL Server эффективно кэширует данные, то большинство операций чтения при формировании отчетов происходит из оперативной памяти, а не с дисков. В этом случае замена SAS 10k на SSD даст существенный прирост только на операциях записи (например, при массовом проведении документов) и при работе с временными таблицами TempDB.
Главным ограничителем для 1С часто выступает частота процессора. Процессоры Intel Xeon E5-2630 v4 имеют базовую частоту 2.2 ГГц. Поскольку многие внутренние механизмы 1С и SQL-запросы выполняются в один поток, низкая тактовая частота ядра становится «бутылочным горлышком». Даже самые быстрые диски не смогут заставить процессор обрабатывать алгоритмы быстрее.
Прежде чем тратить бюджет на дорогостоящие Enterprise SSD, разберем базовые настройки «железа», которые часто игнорируются:
Maximum Performance. По умолчанию включенные функции C-States и P-States заставляют процессор «засыпать» или снижать частоту для экономии энергии. Для 1С это критично: задержка (latency) при пробуждении ядра может замедлять систему на 20–30%.Работа 1С внутри виртуальной машины требует специфических настроек. Проанализируем параметры, которые помогут минимизировать влияние гипервизора:
Latency Sensitivity в значение High. Это заставит гипервизор зарезервировать ресурсы CPU и минимизировать задержки планировщика.LSI Logic используем VMware Paravirtual. Этот драйвер оптимизирован для работы с высоконагруженными базами данных и снижает нагрузку на центральный процессор при операциях ввода-вывода.QPI, что увеличит задержки.Переход на новую версию MSSQL (например, с 2014 на 2019) часто дает мгновенный прирост производительности благодаря улучшенному оптимизатору запросов. Но даже на текущей версии выполним следующие действия:
Медленные отчеты часто активно используют временные таблицы. Разберем, как ускорить TempDB:
TempDB на самом быстром доступном диске (в идеале — на SSD).TempDB, равное количеству логических ядер процессора (но не более 8).TempDB.Для систем 1С рекомендуется ограничивать параллелизм. Рассмотрим установку MAXDOP = 1 или MAXDOP = 2. Это предотвратит ситуацию, когда один сложный запрос занимает все ядра процессора, вызывая ожидания типа CXPACKET и блокируя работу других пользователей.
Если отчет формируется 20 минут, никакое «железо» не сделает его мгновенным, если внутри используется неоптимальный алгоритм. Выясним причину через замер производительности.
Типичная ошибка в 1С — запрос в цикле. Посмотрим на пример кода, который «убивает» производительность независимо от типа диска:
// ПЛОХО: Запрос выполняется внутри цикла для каждой строки
Для Каждого Строка Из ТаблицаДокументов Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Остаток ИЗ РегистрНакопления.Остатки ГДЕ Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Строка.Номенклатура);
// ... выполнение запроса ...
КонецЦикла;
Вместо этого проанализируем правильный подход: получение всех данных одним запросом во временную таблицу и последующее соединение.
// ХОРОШО: Данные выбираются один раз для всего списка
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номенклатура ПОМЕСТИТЬ ВтНоменклатура ИЗ &ТаблицаНоменклатуры;
|ВЫБРАТЬ Остатки.Номенклатура, Остатки.Остаток
|ИЗ ВтНоменклатура КАК Вт
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки КАК Остатки ПО Вт.Номенклатура = Остатки.Номенклатура";
Запрос.УстановитьПараметр("ТаблицаНоменклатуры", СписокНоменклатуры);
Результат = Запрос.Выполнить();
Для принятия окончательного решения о покупке SSD рекомендуем провести мониторинг текущей системы в моменты формирования тех самых «долгих» отчетов:
APDEX для ключевых операций. Это позволит объективно оценить, помогла ли модернизация пользователям.Покупка Enterprise SSD, таких как IBM AS7J (HGST Ultrastar SSD1600MM), безусловно, повысит отзывчивость системы и ускорит запись логов транзакций. Однако для решения проблемы формирования 20-минутных отчетов необходимо действовать комплексно:
MAXDOP и файлов TempDB в SQL Server.MSSQL до версии 2017/2019 для использования современных механизмов оптимизации запросов.Таким образом, мы рекомендуем сначала использовать бесплатные методы оптимизации настроек, и только при подтверждении нехватки IOPS переходить к закупке дорогостоящих SSD.