Почему 1С 7.7 медленно работает на новом сервере и как это исправить?

Системный администратор 1С v7.7 1С:Управление торговлей Торговля и дистрибуция
← На главную

При переходе на новое современное оборудование часто возникает парадоксальная ситуация: многоядерная система с десятками гигабайт оперативной памяти и производительными SSD-массивами показывает более низкую скорость выполнения операций в 1С 7.7, чем старый сервер. Проанализируем, почему проведение документов (например, документа Возврат от покупателя) может замедляться в несколько раз, и разберем по шагам комплекс мер для исправления ситуации.

1. Аппаратный фактор: тактовая частота процессора и энергосбережение

Выясним главную особенность платформы 1С 7.7: большинство ключевых операций, включая проведение документов в процедуре ПроведениеПоРегистрам(), выполняются строго в однопоточном режиме. В связи с этим производительность системы критически зависит не от общего количества ядер, а от тактовой частоты конкретного ядра процессора.

При выборе многопроцессорных систем на базе Intel Xeon начальных серий (например, с базовой частотой 1.7 ГГц) производительность отдельного потока оказывается значительно ниже, чем у процессоров с высокой базовой частотой (от 3.0 ГГц и выше). Даже устаревший процессор с частотой 2.2–2.5 ГГц будет выполнять однопоточные вычисления быстрее, чем современное ядро с частотой 1.7 ГГц.

Рассмотрим порядок настройки аппаратной части:

  1. Настройка схемы электропитания в ОС: Переведем план питания Windows Server в режим Максимальная производительность (High Performance). По умолчанию операционная система снижает частоту неиспользуемых ядер, а переход в производительное состояние занимает время, создавая микрозадержки при коротких операциях проведения.
  2. Отключение C-States в BIOS: Зайдем в настройки BIOS сервера и полностью отключим энергосберегающие состояния процессора (C-States: C1E, C3, C6). Это заставит ядра процессора постоянно работать на максимальной тактовой частоте без сброса частоты при простоях.
  3. Замена процессоров: Если сервер куплен под задачи 1С 7.7 и терминального сервера, рекомендуется заменить процессоры с низкой частотой (например, 1.7 ГГц) на модели с максимальной частотой на одно ядро (например, серий Intel Xeon E5-1600 или высокочастотные десктопные решения вроде Intel Core i7 / i9, если позволяет инфраструктура).

2. Настройка СУБД MS SQL Server для работы с 1С 7.7

Платформа 1С 7.7 создавалась во времена MS SQL Server 2000 и имеет конструктивные особенности взаимодействия со СУБД. При переносе базы на MS SQL Server 2008 и более новые версии необходимо выполнить базовую тонкую настройку сервера БД.

Разберем основные параметры оптимизации SQL Server:

  1. Ограничение параллелизма (MAXDOP): По умолчанию SQL Server старается распараллеливать тяжелые запросы на все доступные ядра. Для 1С 7.7 это вызывает огромные накладные расходы на синхронизацию потоков. Необходимо установить параметр Max Degree of Parallelism (MAXDOP) равным 1 в свойствах сервера СУБД.
  2. Конфигурация TempDB: Файлы базы данных TempDB должны располагаться на быстром SSD-диске. Рекомендуется создать несколько файлов данных TempDB одинакового размера (по числу физических ядер процессора), чтобы устранить конкуренцию за страницы распределения памяти при проведении документов несколькими пользователями.
  3. Обновление статистики и реиндексация: После переноса базы на новый сервер необходимо вручную выполнить полное обновление статистики (UPDATE STATISTICS) и дефрагментацию всех индексов базы данных. Без актуальной статистики оптимизатор SQL Server строит неэффективные планы запросов, увеличивая время выполнения операций с 30 до 50+ секунд.
  4. Настройка эскалации блокировок: В MS SQL Server 2008 включена эскалация строк до блокировки всей таблицы при достижении порога в 5000 блокировок. Чтобы при проведении документов у одного пользователя не блокировалась работа остальных, рекомендуется отключить эскалацию блокировок на ключевых таблицах регистров:
    
    ALTER TABLE RGxxxx SET (LOCK_ESCALATION = DISABLE);
    ALTER TABLE RAxxxx SET (LOCK_ESCALATION = DISABLE);
    

3. Анализ прикладного кода и данных (устранение неявных "зависаний")

Если серверное железо и SQL настроены, но документ Возврат от покупателя или Реализация все равно проводиться слишком долго, следует проанализировать объемы обрабатываемых данных в регистрах.

Частая проблема конфигураций «Торговля и склад» — использование единственного системного контрагента (например, Розничная выручка или Частное лицо) для всех розничных продаж. В этом случае:

  1. Если по такому контрагенту не регулярно фиксируются оплаты или не закрываются долги, в регистре Покупатели (или аналогичном регистре взаиморасчетов) накапливаются сотни тысяч незакрытых записей и итогов.
  2. При проведении документа возврата система выполняет алгоритм поиска и списания долгов, перебирая гигантскую таблицу движений по одному конкретному контрагенту.
  3. В результате временный расчет итогов замораживает работу документа на десятки секунд, накладывая блокировки на всю таблицу регистра для остальных пользователей.

Для исправления ситуации выполним следующие действия:

  1. Заведем раздельных контрагентов для разных розничных точек или периодически создаем нового розничного контрагента, обнуляя накопленный хвост незакрытых взаиморасчетов.
  2. Проверим корректность закрытия регистров и при необходимости выполним срез/свертку задолженностей.
  3. Используем прямые запросы через библиотеку 1CPP или toySQL для тяжелых отчетов и процедур проведения, исключая стандартный механизм временного расчета итогов 1С 7.7.

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

← На главную