Как ускорить процесс «Тестирования и исправления» в 1С, если он использует только одно ядро процессора?

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

Ситуация, когда при запуске тяжелых сервисных процедур, таких как Тестирование и исправление (ТиИ), система использует ресурсы сервера лишь на малую долю, знакома многим администраторам. Мы видим в диспетчере задач, что один процесс 1cv8.exe загружает одно ядро на 100%, в то время как остальные 15 или более ядер простаивают. Попытки «заставить» программу использовать все процессоры часто приводят к поиску сомнительных утилит, но решение лежит в плоскости понимания архитектуры платформы и тонкой настройки окружения.

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

Архитектурный тупик: закон Амдала в действии

Прежде всего, проанализируем фундаментальную причину. Платформа 1С:Предприятие в режиме конфигуратора (где выполняется ТиИ) является однопоточным приложением для большинства сервисных задач. Это означает, что последовательность команд выполняется строго друг за другом в рамках одного вычислительного потока. Мы не можем просто «разрезать» алгоритм проверки логической целостности таблицы на 16 частей и раздать их разным ядрам, если сам алгоритм на это не рассчитан.

Вспомним классическую метафору из обсуждения: «Девять женщин не смогут родить ребенка за один месяц». Если задача принципиально последовательная, добавление вычислительных ресурсов (ядер) не даст никакого эффекта. Процесс 1cv8.exe будет ограничен производительностью именно того одного ядра, на котором он выполняется в данный момент времени.

Мифы об утилитах CPU-Control и «распараллеливании»

Разберем популярное заблуждение о программах типа CPU-Control. Эти утилиты не умеют превращать однопоточный код в многопоточный. Максимум, что они делают — это принудительно привязывают процесс к определенным ядрам (CPU Affinity) или циклически перебрасывают его между ними.

Проанализируем последствия такого «перебрасывания»: при каждом переходе процесса с ядра №1 на ядро №2 происходит сброс кэшей процессора (L1, L2). Данные, которые процесс подготовил для быстрой обработки в кэше первого ядра, оказываются недоступны на втором, и их приходится подгружать заново из медленной оперативной памяти. В итоге использование сторонних «оптимизаторов» часто приводит не к ускорению, а к замедлению работы 1С на 5–15%.

Оптимизация производительности одного ядра

Раз мы не можем взять количеством ядер, мы должны взять их качеством (мощностью). Рассмотрим, как максимизировать отдачу от одного активного ядра:

  1. Режим электропитания: В настройках операционной системы (особенно на Windows Server) выставим схему «Высокая производительность» (High Performance). Это запретит процессору снижать частоту в моменты ожидания и убирать ядра в «парковку» (Core Parking).
  2. Настройки BIOS/UEFI: Проанализируем настройки физического сервера. Необходимо отключить функции энергосбережения C-States и Intel SpeedStep. Вместо этого включим Turbo Boost. В однопоточном режиме современные процессоры умеют саморазгоняться выше номинальной частоты, если остальные ядра не нагружены.
  3. Виртуализация: Если сервер виртуальный (Hyper-V, VMware), проверим параметр CPU Ready Time. Нам нужно убедиться, что гипервизор выделяет физические такты процессора нашей виртуальной машине мгновенно. В VMware для критических задач полезно настроить Latency Sensitivity в значение «High».

Ускорение через настройки СУБД (SQL Server)

Если ваша база работает в клиент-серверном варианте, часть нагрузки при ТиИ ложится на SQL-сервер. В отличие от 1С, SQL умеет работать многопоточно. Рассмотрим, как это использовать:

Проанализируем настройку Max Degree of Parallelism (MAXDOP). Если для обычного режима работы 1С рекомендует устанавливать MAXDOP от 1 до 8 (в зависимости от количества ядер и NUMA-узлов), то на время проведения масштабного ТиИ (например, при реиндексации) можно временно увеличить этот параметр, чтобы SQL использовал все доступные мощности для перестроения индексов.

Также обратим внимание на TempDB. Во время исправления базы SQL активно использует временные таблицы. Убедимся, что:

Работа с дисковой подсистемой и антивирусами

Часто процессор загружен на 100% не потому, что он быстро считает, а потому, что он ждет ответа от диска (стадия I/O Wait). Проанализируем состояние дисков:

  1. Исключения антивируса: Это критически важный момент. Антивирус может проверять каждый временный файл, создаваемый платформой при ТиИ. Добавим в исключения файлы .1cd, .1cl, .log, а также папки %AppData%\1C\1cv8 и временные директории.
  2. Кэширование: Проверим, включен ли Write-Back Cache на дисковом контроллере. Без кэша на запись любая операция модификации данных в ТиИ будет выполняться в десятки раз медленнее.

Альтернативный инструмент: chdbfl.exe

Для файловых баз данных часто нет смысла запускать полное ТиИ через конфигуратор, если цель — просто вылечить базу от ошибок. Разберем работу утилиты chdbfl.exe, которая находится в папке bin установленной платформы.

Эта утилита работает напрямую с файлом базы на физическом уровне, минуя тяжелые уровни абстракции конфигуратора. Она зачастую выполняет проверку целостности в разы быстрее, чем встроенное Тестирование и исправление. Рекомендуем сначала запускать именно её, а уже затем переходить к логическим проверкам в ТиИ.

Временное отключение журнала регистрации

При массовом исправлении объектов 1С генерирует огромное количество записей в журнале регистрации. Запись в файл lgp или таблицу lgd создает дополнительную нагрузку на дисковую подсистему и процессор.

Посмотрим, как это оптимизировать: на время выполнения ТиИ можно временно установить уровень регистрации «Не регистрировать» или отключить его вовсе в настройках журнала. Это позволит процессу 1cv8.exe не тратить драгоценные такты на запись логов.

Резюме

Подведем итоги нашего анализа. «Дать процессу все процессоры» технически невозможно из-за ограничений самого кода 1С. Однако мы можем значительно сократить время прохождения ТиИ, если:

Следуя этим шагам, вы добьетесь максимально возможной скорости работы, которую способна выдать текущая архитектура платформы.

← На главную