Часто системные администраторы и разработчики сталкиваются с ситуацией, когда при выполнении тяжелых операций (например, закрытия месяца или восстановления последовательности) 1С потребляет ровно 25% ресурсов четырехъядерного процессора. При этом процесс может длиться часами, а общая загрузка системы кажется низкой. Разберем подробно, почему так происходит и какие шаги помогут нам ускорить работу программы.
Проанализируем ситуацию с технической точки зрения. Основной клиентский процесс 1С (1cv8.exe) является однопоточным. Это означает, что в каждый конкретный момент времени одна вычислительная задача может выполняться только на одном логическом ядре процессора. Если ваш сервер оснащен 4 ядрами, то 100% мощности одного ядра составят ровно 25% от общей мощности процессора.
Важно понимать: то, что в диспетчере задач вы видите равномерную загрузку по 25% на каждом из четырех ядер, — это результат работы планировщика (шедулера) операционной системы Windows. Система перебрасывает поток с одного ядра на другое для равномерного распределения тепла, но суммарно задача всё равно использует ресурсы только одной вычислительной единицы. Ускорить выполнение такой задачи простым увеличением количества ядер невозможно — нам нужно увеличивать производительность каждого конкретного ядра или устранять задержки ввода-вывода.
В файловом режиме работы 1С крайне чувствительна к скорости работы с временными файлами и файлом базы данных 1v8.1CD. Даже если Task Manager показывает низкую загрузку диска, это может быть обманчивым из-за большой очереди диска на коротких операциях записи.
Рассмотрим метод переноса временных файлов в оперативную память (RAM-диск). Это позволит сократить время отклика системы на операции чтения-записи промежуточных данных. Для реализации этого решения выполним следующие действия:
TEMP и TMP пользователя, под которым запускается 1С, на созданный RAM-диск.Проанализируем настройки оборудования. Серверные процессоры Xeon часто работают на пониженных частотах для экономии энергии. В условиях однопоточной нагрузки это критично.
Разберем шаги по настройке:
C-States, Intel SpeedStep. Это заставит процессор работать на максимальной частоте постоянно, не тратя время на "разгон" ядра при поступлении задачи.Файловая база 1С постоянно производит запись в файл .1CD и создает множество мелких файлов .tmp. Если антивирус проверяет каждый такой файл в момент обращения, производительность падает в разы.
Настроим исключения в антивирусе или Windows Defender. Добавим в доверенную зону:
*.1CD, *.1CL, *.tmp.1cv8.exe, 1cv8c.exe.Если закрытие месяца выполняется неоправданно долго (например, 10 часов), проанализируем состояние самой базы. Со временем в файловых базах накапливаются внутренние ошибки и фрагментация данных.
Выполним регламентные работы:
chdbfl.exe (находится в папке bin платформы) для проверки физической целостности файла базы данных.Иногда причиной аномально долгой работы являются ошибки в коде платформы при работе с файловым движком. Например, известна ошибка 30167387, при которой запросы с оператором В (IN) в условиях выполняются крайне медленно, если они накладываются на индексированные поля.
Проанализируем код запросов в проблемных модулях. Если мы видим конструкцию типа:
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи ГДЕ Номенклатура В (&СписокНоменклатуры) И Склад В (&СписокСкладов)";
В файловом варианте это может привести к деградации производительности. В таких случаях стоит рассмотреть возможность временного помещения данных во временные таблицы и использования соединений вместо оператора В.
Если все вышеперечисленные методы не принесли желаемого ускорения, стоит признать, что файловый движок 1С исчерпал свои возможности. При переходе на SQL-версию (MS SQL Server, PostgreSQL):
Таким образом, мы рассмотрели комплексный подход к решению проблемы производительности 1С, начиная от базовых настроек "железа" и заканчивая архитектурными изменениями системы.