Как повысить производительность 1С при переходе с HDD на SSD и оптимизировать работу SQL-сервера?

Системный администратор 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Вопрос модернизации серверного оборудования для нужд 1С часто сводится к замене традиционных жестких дисков (HDD или «спиннеров») на твердотельные накопители (SSD). Однако в высоконагруженных системах, работающих на связке MSSQL + VMware + 1C, дисковая подсистема — это лишь одна из составляющих производительности. Рассмотрим подробно, как правильно подойти к ускорению системы, почему дорогие Enterprise SSD могут не решить проблему «медленных отчетов» и на какие настройки стоит обратить внимание в первую очередь.

Анализ узких мест: почему SSD — не панацея

В рассматриваемой ситуации мы имеем базу данных объемом около 70 ГБ, которая практически полностью умещается в выделенную оперативную память (90 ГБ). Проанализируем этот момент: если SQL Server эффективно кэширует данные, то большинство операций чтения при формировании отчетов происходит из оперативной памяти, а не с дисков. В этом случае замена SAS 10k на SSD даст существенный прирост только на операциях записи (например, при массовом проведении документов) и при работе с временными таблицами TempDB.

Главным ограничителем для 1С часто выступает частота процессора. Процессоры Intel Xeon E5-2630 v4 имеют базовую частоту 2.2 ГГц. Поскольку многие внутренние механизмы 1С и SQL-запросы выполняются в один поток, низкая тактовая частота ядра становится «бутылочным горлышком». Даже самые быстрые диски не смогут заставить процессор обрабатывать алгоритмы быстрее.

Шаг 1: Настройка серверного оборудования и BIOS

Прежде чем тратить бюджет на дорогостоящие Enterprise SSD, разберем базовые настройки «железа», которые часто игнорируются:

  1. Режим энергопотребления (Power Management): В BIOS сервера Lenovo x3650 M5 обязательно выставим режим Maximum Performance. По умолчанию включенные функции C-States и P-States заставляют процессор «засыпать» или снижать частоту для экономии энергии. Для 1С это критично: задержка (latency) при пробуждении ядра может замедлять систему на 20–30%.
  2. Технология Easy Tier (для СХД Storwize V3700): Если вы используете внешнюю систему хранения данных, рассмотрите возможность покупки всего двух SSD для создания «горячего» уровня данных. Система сама переместит наиболее востребованные блоки базы 1С на быстрые диски, что позволит сэкономить, не покупая 4 диска для полного RAID10.

Шаг 2: Оптимизация виртуализации VMware ESXi

Работа 1С внутри виртуальной машины требует специфических настроек. Проанализируем параметры, которые помогут минимизировать влияние гипервизора:

Шаг 3: Настройка MSSQL Server для 1С

Переход на новую версию MSSQL (например, с 2014 на 2019) часто дает мгновенный прирост производительности благодаря улучшенному оптимизатору запросов. Но даже на текущей версии выполним следующие действия:

Настройка TempDB

Медленные отчеты часто активно используют временные таблицы. Разберем, как ускорить TempDB:

  1. Разместим файлы TempDB на самом быстром доступном диске (в идеале — на SSD).
  2. Создадим количество файлов данных TempDB, равное количеству логических ядер процессора (но не более 8).
  3. Установим одинаковый размер и фиксированный шаг приращения для всех файлов TempDB.

Параметр Max Degree of Parallelism (MAXDOP)

Для систем 1С рекомендуется ограничивать параллелизм. Рассмотрим установку MAXDOP = 1 или MAXDOP = 2. Это предотвратит ситуацию, когда один сложный запрос занимает все ядра процессора, вызывая ожидания типа CXPACKET и блокируя работу других пользователей.

Шаг 4: Аудит кода 1С и поиск Bottleneck

Если отчет формируется 20 минут, никакое «железо» не сделает его мгновенным, если внутри используется неоптимальный алгоритм. Выясним причину через замер производительности.

Типичная ошибка в 1С — запрос в цикле. Посмотрим на пример кода, который «убивает» производительность независимо от типа диска:


// ПЛОХО: Запрос выполняется внутри цикла для каждой строки
Для Каждого Строка Из ТаблицаДокументов Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Остаток ИЗ РегистрНакопления.Остатки ГДЕ Номенклатура = &Номенклатура";
    Запрос.УстановитьПараметр("Номенклатура", Строка.Номенклатура);
    // ... выполнение запроса ...
КонецЦикла;

Вместо этого проанализируем правильный подход: получение всех данных одним запросом во временную таблицу и последующее соединение.


// ХОРОШО: Данные выбираются один раз для всего списка
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номенклатура ПОМЕСТИТЬ ВтНоменклатура ИЗ &ТаблицаНоменклатуры;
               |ВЫБРАТЬ Остатки.Номенклатура, Остатки.Остаток 
               |ИЗ ВтНоменклатура КАК Вт 
               |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки КАК Остатки ПО Вт.Номенклатура = Остатки.Номенклатура";
Запрос.УстановитьПараметр("ТаблицаНоменклатуры", СписокНоменклатуры);
Результат = Запрос.Выполнить();

Инструменты мониторинга

Для принятия окончательного решения о покупке SSD рекомендуем провести мониторинг текущей системы в моменты формирования тех самых «долгих» отчетов:

Выводы и рекомендации

Покупка Enterprise SSD, таких как IBM AS7J (HGST Ultrastar SSD1600MM), безусловно, повысит отзывчивость системы и ускорит запись логов транзакций. Однако для решения проблемы формирования 20-минутных отчетов необходимо действовать комплексно:

  1. Проверить и перевести сервер в режим High Performance на уровне BIOS и VMware.
  2. Проверить настройки MAXDOP и файлов TempDB в SQL Server.
  3. Привлечь специалиста 1С для замера производительности конкретного отчета. Если замер покажет, что 90% времени уходит на выполнение одной строки кода с запросом, покупка дисков за $5000 будет неэффективной.
  4. Рассмотреть обновление MSSQL до версии 2017/2019 для использования современных механизмов оптимизации запросов.

Таким образом, мы рекомендуем сначала использовать бесплатные методы оптимизации настроек, и только при подтверждении нехватки IOPS переходить к закупке дорогостоящих SSD.

← На главную