Ситуация, когда время проведения типового документа (например, РеализацияТоваровУслуг в 1С:Управление торговлей 11) вырастает с 3–4 секунд в спокойном режиме до 10–15 секунд при одновременной работе пользователей, является классическим симптомом аппаратных и системных блокировок. Особенно остро эта проблема проявляется на серверах, где на одной физической машине объединены служба терминалов (RDS), сервер 1С:Предприятия и СУБД MS SQL Server. Разберем по шагам, как выявить узкие места и ускорить систему.
Проанализируем конфигурацию серверного оборудования. Процессоры линейки Intel Xeon E5-2630 обладают большим количеством ядер, но невысокой базовой тактовой частотой на одно ядро (2.3–2.6 ГГц). Любая транзакция проведения документа в платформе 1С выполняется строго в один поток. Если в диспетчере задач общая нагрузка на 40 логических ядер не превышает 7–10%, конкретное ядро, выполняющее транзакцию сеанса в процессе rphost или sqlservr, может быть загружено на 100%.
Для устранения аппаратных задержек выполним следующие действия:
Enhanced Intel SpeedStep (EIST), C1E, C3, C6, переведя профиль питания в режим Maximum Performance. Когда процессор непрерывно переключает частоты ядер при появлении и завершении коротких транзакций 1С, время реакции на проведение документов кратно увеличивается.rphost к банку памяти соседнего сокета через шину QPI приводит к микрозадержкам. Убедимся, что для служб выделено достаточно памяти в пределах одного узла или настроено чередование страниц.В операционных системах Windows Server по умолчанию активна функция Dynamic Fair Share Scheduling (DFSS). Этот механизм динамически перераспределяет процессорное время, полосу дискового ввода-вывода и сетевой трафик поровну между всеми терминальными сессиями пользователей. В результате транзакционные серверные службы rphost.exe и sqlservr.exe могут искусственно ограничиваться планировщиком ОС, уступая ресурсы пользовательским сессиям.
Отключим данный механизм через реестр Windows:
regedit.DWORD (32 бита) с именем EnableCPUQuota, присвоив ему значение 0.Проанализируем конфигурацию СУБД. По умолчанию MS SQL Server 2016 не оптимизирован под специфику однопоточных OLTP-нагрузок 1С. Выполним ключевые системные корректировки:
CXPACKET) и зависанию транзакции. В свойствах сервера SQL (раздел Advanced) или через команду T-SQL жестко установим MAXDOP = 1:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max degree of parallelism', 1;
RECONFIGURE;
localhost или LPC:ИмяСервера.tempdb должна содержать несколько файлов данных одинакового размера с фиксированным шагом авторасширения (рекомендуется создать 8 файлов данных по числу физических ядер первого процессора). Это исключает блокировки служебных страниц PFS и GAM.SeManageVolumePrivilege), чтобы исключить паузы при росте файлов данных.Сбор событий 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 секунды.
Если серверная часть оптимизирована, но проведение документов в моменты пиковой нагрузки замедляется, узкое место находится в логике проведения учетных регистров:
ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж, РасчетыСКлиентами) должно быть включено свойство Разделение итогов. Проверим его активность через стандартную обработку Управление итогами и агрегатами. Механизм позволяет одновременно записывать движения в регистр нескольким сеансам без взаимных блокировок таблицы итогов.rphost (из расчета 1 процесс на 8–10 активных пользователей). Это снижает уровень фрагментации памяти и снижает конкуренцию сеансов за внутренние блокировки одного процесса.