Ситуация, когда при запуске тяжелых сервисных процедур, таких как Тестирование и исправление (ТиИ), система использует ресурсы сервера лишь на малую долю, знакома многим администраторам. Мы видим в диспетчере задач, что один процесс 1cv8.exe загружает одно ядро на 100%, в то время как остальные 15 или более ядер простаивают. Попытки «заставить» программу использовать все процессоры часто приводят к поиску сомнительных утилит, но решение лежит в плоскости понимания архитектуры платформы и тонкой настройки окружения.
Рассмотрим подробно, почему возникает это ограничение и какими методами мы можем реально ускорить выполнение регламентных операций в 1С.
Прежде всего, проанализируем фундаментальную причину. Платформа 1С:Предприятие в режиме конфигуратора (где выполняется ТиИ) является однопоточным приложением для большинства сервисных задач. Это означает, что последовательность команд выполняется строго друг за другом в рамках одного вычислительного потока. Мы не можем просто «разрезать» алгоритм проверки логической целостности таблицы на 16 частей и раздать их разным ядрам, если сам алгоритм на это не рассчитан.
Вспомним классическую метафору из обсуждения: «Девять женщин не смогут родить ребенка за один месяц». Если задача принципиально последовательная, добавление вычислительных ресурсов (ядер) не даст никакого эффекта. Процесс 1cv8.exe будет ограничен производительностью именно того одного ядра, на котором он выполняется в данный момент времени.
Разберем популярное заблуждение о программах типа CPU-Control. Эти утилиты не умеют превращать однопоточный код в многопоточный. Максимум, что они делают — это принудительно привязывают процесс к определенным ядрам (CPU Affinity) или циклически перебрасывают его между ними.
Проанализируем последствия такого «перебрасывания»: при каждом переходе процесса с ядра №1 на ядро №2 происходит сброс кэшей процессора (L1, L2). Данные, которые процесс подготовил для быстрой обработки в кэше первого ядра, оказываются недоступны на втором, и их приходится подгружать заново из медленной оперативной памяти. В итоге использование сторонних «оптимизаторов» часто приводит не к ускорению, а к замедлению работы 1С на 5–15%.
Раз мы не можем взять количеством ядер, мы должны взять их качеством (мощностью). Рассмотрим, как максимизировать отдачу от одного активного ядра:
C-States и Intel SpeedStep. Вместо этого включим Turbo Boost. В однопоточном режиме современные процессоры умеют саморазгоняться выше номинальной частоты, если остальные ядра не нагружены.CPU Ready Time. Нам нужно убедиться, что гипервизор выделяет физические такты процессора нашей виртуальной машине мгновенно. В VMware для критических задач полезно настроить Latency Sensitivity в значение «High».Если ваша база работает в клиент-серверном варианте, часть нагрузки при ТиИ ложится на SQL-сервер. В отличие от 1С, SQL умеет работать многопоточно. Рассмотрим, как это использовать:
Проанализируем настройку Max Degree of Parallelism (MAXDOP). Если для обычного режима работы 1С рекомендует устанавливать MAXDOP от 1 до 8 (в зависимости от количества ядер и NUMA-узлов), то на время проведения масштабного ТиИ (например, при реиндексации) можно временно увеличить этот параметр, чтобы SQL использовал все доступные мощности для перестроения индексов.
Также обратим внимание на TempDB. Во время исправления базы SQL активно использует временные таблицы. Убедимся, что:
TempDB расположены на самом быстром доступном SSD/NVMe диске.TempDB соответствует количеству логических ядер процессора (но не более 8).Часто процессор загружен на 100% не потому, что он быстро считает, а потому, что он ждет ответа от диска (стадия I/O Wait). Проанализируем состояние дисков:
.1cd, .1cl, .log, а также папки %AppData%\1C\1cv8 и временные директории.Write-Back Cache на дисковом контроллере. Без кэша на запись любая операция модификации данных в ТиИ будет выполняться в десятки раз медленнее.Для файловых баз данных часто нет смысла запускать полное ТиИ через конфигуратор, если цель — просто вылечить базу от ошибок. Разберем работу утилиты chdbfl.exe, которая находится в папке bin установленной платформы.
Эта утилита работает напрямую с файлом базы на физическом уровне, минуя тяжелые уровни абстракции конфигуратора. Она зачастую выполняет проверку целостности в разы быстрее, чем встроенное Тестирование и исправление. Рекомендуем сначала запускать именно её, а уже затем переходить к логическим проверкам в ТиИ.
При массовом исправлении объектов 1С генерирует огромное количество записей в журнале регистрации. Запись в файл lgp или таблицу lgd создает дополнительную нагрузку на дисковую подсистему и процессор.
Посмотрим, как это оптимизировать: на время выполнения ТиИ можно временно установить уровень регистрации «Не регистрировать» или отключить его вовсе в настройках журнала. Это позволит процессу 1cv8.exe не тратить драгоценные такты на запись логов.
Подведем итоги нашего анализа. «Дать процессу все процессоры» технически невозможно из-за ограничений самого кода 1С. Однако мы можем значительно сократить время прохождения ТиИ, если:
chdbfl.exe для первичной диагностики.Следуя этим шагам, вы добьетесь максимально возможной скорости работы, которую способна выдать текущая архитектура платформы.