Как ускорить проведение документов в 1С при работе на совмещенном сервере?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Ситуация, когда время проведения типового документа (например, РеализацияТоваровУслуг в 1С:Управление торговлей 11) вырастает с 3–4 секунд в спокойном режиме до 10–15 секунд при одновременной работе пользователей, является классическим симптомом аппаратных и системных блокировок. Особенно остро эта проблема проявляется на серверах, где на одной физической машине объединены служба терминалов (RDS), сервер 1С:Предприятия и СУБД MS SQL Server. Разберем по шагам, как выявить узкие места и ускорить систему.

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

Проанализируем конфигурацию серверного оборудования. Процессоры линейки Intel Xeon E5-2630 обладают большим количеством ядер, но невысокой базовой тактовой частотой на одно ядро (2.3–2.6 ГГц). Любая транзакция проведения документа в платформе 1С выполняется строго в один поток. Если в диспетчере задач общая нагрузка на 40 логических ядер не превышает 7–10%, конкретное ядро, выполняющее транзакцию сеанса в процессе rphost или sqlservr, может быть загружено на 100%.

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

  1. Отключение C-States в BIOS. Зайдем в BIOS материнской платы сервера и полностью отключим все энергосберегающие режимы: Enhanced Intel SpeedStep (EIST), C1E, C3, C6, переведя профиль питания в режим Maximum Performance. Когда процессор непрерывно переключает частоты ядер при появлении и завершении коротких транзакций 1С, время реакции на проведение документов кратно увеличивается.
  2. Схема электропитания в Windows Server. Откроем панель управления ОС, перейдем в раздел электропитания и принудительно выставим профиль Высокая производительность (High Performance).
  3. Учет архитектуры NUMA. В двухсокетных серверах память разделена между процессорами. Обращение процесса rphost к банку памяти соседнего сокета через шину QPI приводит к микрозадержкам. Убедимся, что для служб выделено достаточно памяти в пределах одного узла или настроено чередование страниц.

2. Отключение механизма распределения ресурсов терминала (DFSS)

В операционных системах Windows Server по умолчанию активна функция Dynamic Fair Share Scheduling (DFSS). Этот механизм динамически перераспределяет процессорное время, полосу дискового ввода-вывода и сетевой трафик поровну между всеми терминальными сессиями пользователей. В результате транзакционные серверные службы rphost.exe и sqlservr.exe могут искусственно ограничиваться планировщиком ОС, уступая ресурсы пользовательским сессиям.

Отключим данный механизм через реестр Windows:

  1. Запустим редактор реестра regedit.
  2. Перейдем в ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System.
  3. Создадим или изменим параметр типа DWORD (32 бита) с именем EnableCPUQuota, присвоив ему значение 0.
  4. Перейдем в ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk и установим параметр EnableFairShare в значение 0.
  5. Перезагрузим сервер для применения системных настроек.

3. Оптимизация параметров MS SQL Server для 1С

Проанализируем конфигурацию СУБД. По умолчанию MS SQL Server 2016 не оптимизирован под специфику однопоточных OLTP-нагрузок 1С. Выполним ключевые системные корректировки:

  1. Параметр MAXDOP (Max Degree of Parallelism). По умолчанию СУБД пытается распараллеливать тяжелые запросы между всеми доступными ядрами. В момент проведения документа это приводит к взаимным ожиданиям потоков (тип ожидания CXPACKET) и зависанию транзакции. В свойствах сервера SQL (раздел Advanced) или через команду T-SQL жестко установим MAXDOP = 1:
    
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'max degree of parallelism', 1;
    RECONFIGURE;
    
  2. Использование протокола Shared Memory. Так как сервер 1С и SQL Server работают на одном физическом хосте, исключим накладные расходы сетевого стека TCP/IP. В консоли кластера 1С при настройке подключения к базе данных в поле сервера СУБД укажем localhost или LPC:ИмяСервера.
  3. Конфигурация базы TempDB. При проведении документов система активно использует временные таблицы. База tempdb должна содержать несколько файлов данных одинакового размера с фиксированным шагом авторасширения (рекомендуется создать 8 файлов данных по числу физических ядер первого процессора). Это исключает блокировки служебных страниц PFS и GAM.
  4. Мгновенная инициализация файлов (IFI). Предоставим учетной записи, под которой запущена служба SQL Server, локальное право безопасности Windows Выполнение задач по обслуживанию томов (SeManageVolumePrivilege), чтобы исключить паузы при росте файлов данных.

4. Диагностика узких мест с помощью Технологического журнала

Сбор событий CONN в технологическом журнале платформы фиксирует только факт подключения пользователей и не дает информации о причинах медленной работы. Чтобы зафиксировать реальные блокировки и долгие запросы при проведении, настроим корректный файл logcfg.xml в каталоге conf платформы 1С:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\1c_logs" history="24">
        <event>
            <eq property="name" value="DBMSSQL"/>
            <gt property="duration" value="1000000"/>
        </event>
        <event>
            <eq property="name" value="TLOCK"/>
            <gt property="WaitConnections" value="0"/>
        </event>
        <event>
            <eq property="name" value="TTIMEOUT"/>
        </event>
        <event>
            <eq property="name" value="TDEADLOCK"/>
        </event>
        <property name="all"/>
    </log>
</config>

События TLOCK и TTIMEOUT покажут, какие именно метаданные вызывают ожидание на блокировках при конкурентной работе нескольких операторов, а событие DBMSSQL выявит тяжелые запросы внутри транзакции проведения, выполняющиеся дольше 1 секунды.

5. Прикладные настройки в конфигурации «Управление торговлей 11»

Если серверная часть оптимизирована, но проведение документов в моменты пиковой нагрузки замедляется, узкое место находится в логике проведения учетных регистров:

  1. Отложенный расчет взаиморасчетов. В УТ 11 проведение документов реализации по умолчанию может онлайн распределять оплату по расчетным документам. Перейдем в НСИ и администрирование -> Финансовый результат и контроллинг -> Взаиморасчеты и переключим режим на Отложенно в фоновом режиме. Это снимает с транзакции проведения тяжелый расчет остатков по объектам расчетов.
  2. Включение разделения итогов. Для ключевых регистров накопления (ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж, РасчетыСКлиентами) должно быть включено свойство Разделение итогов. Проверим его активность через стандартную обработку Управление итогами и агрегатами. Механизм позволяет одновременно записывать движения в регистр нескольким сеансам без взаимных блокировок таблицы итогов.
  3. Расчет себестоимости товаров. Убедимся, что списание себестоимости и партий не выполняется оперативно внутри документа. В типовой методике расчет себестоимости должен производиться регламентным заданием в фоне или в конце учетного периода.
  4. Настройка рабочих процессов кластера 1С. В консоли администрирования кластера разделим нагрузку, настроив запуск нескольких рабочих процессов rphost (из расчета 1 процесс на 8–10 активных пользователей). Это снижает уровень фрагментации памяти и снижает конкуренцию сеансов за внутренние блокировки одного процесса.
← На главную