Почему зависает или медленно работает обмен данными РИБ при загрузке от главного узла?

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

Проблема низкой производительности или полного «зависания» распределенных информационных баз (РИБ) — одна из самых трудоемких задач для системного администратора и программиста 1С. Особенно остро это проявляется в крупных конфигурациях, таких как Управление торговлей 11, работающих в связке с СУБД PostgreSQL. В данной статье мы подробно разберем, почему типовой обмен может выполняться часами, как диагностировать причины блокировок и какие конкретные шаги помогут ускорить процесс в десятки раз.

Анализ инфраструктуры: влияние сервера лицензирования

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

Выясним причину: часто в крупных сетях используется выделенный сервер лицензирования (виртуальная машина). При каждом обращении к защищенным объектам или выполнении интенсивных транзакций в РИБ система постоянно обращается к этому серверу. Сетевые задержки и особенности работы менеджера лицензий в виртуальной среде могут стать «бутылочным горлышком».

Решение: перенос программных или аппаратных лицензий непосредственно на рабочий сервер, где запущены процессы rphost. Это исключает лишнее сетевое взаимодействие и позволяет платформе мгновенно получать подтверждение лицензионных прав, что критически важно при массовой обработке объектов в транзакции.

Оптимизация PostgreSQL: параметр synchronous_commit

Если ваша база работает на PostgreSQL, одной из главных причин медленной загрузки данных является избыточная надежность записи. По умолчанию СУБД после каждой микротранзакции ожидает физического подтверждения записи данных на диск. При обмене РИБ, когда загружаются тысячи объектов, это приводит к колоссальным задержкам.

Разберем, как это исправить. Нам необходимо изменить настройки в конфигурационном файле postgresql.conf. Установим параметр synchronous_commit в значение off или local. Это позволит серверу группировать записи в памяти и сбрасывать их на диск пачками, что ускоряет загрузку данных РИБ в несколько раз. Однако помните, что значение off несет риск потери последних нескольких транзакций при внезапном отключении питания сервера, поэтому наличие ИБП обязательно.

Управление транзакциями при загрузке данных

Проанализируем ситуацию с точки зрения кода. В старых версиях конфигураций (на базе УПП или УТ 10.3) программист мог жестко задать количество объектов в одной транзакции. В современных решениях на базе БСП (Библиотека стандартных подсистем) это управление автоматизировано, но принцип остается прежним. Если транзакция слишком большая, она потребляет огромный объем оперативной памяти и вызывает длительные блокировки таблиц.

Если обмен зависает на этапе «Изменение данных», попробуем принудительно уменьшить объем данных, обрабатываемых за один раз. Для этого в коде модуля обмена можно реализовать логику порционной загрузки, используя НачатьТранзакцию() и ЗафиксироватьТранзакцию() через определенное количество обработанных элементов. Рассмотрим пример логики:


КоличествоОбработанных = 0;
РазмерПорции = 100; // Оптимально для больших объектов
НачатьТранзакцию();
Пока ЧтениеСообщения.Следующий() Цикл
    // Код загрузки объекта
    КоличествоОбработанных = КоличествоОбработанных + 1;
    Если КоличествоОбработанных % РазмерПорции = 0 Тогда
        ЗафиксироватьТранзакцию();
        НачатьТранзакцию();
    КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();

Такой подход позволяет избежать переполнения лога транзакций СУБД и значительно снижает нагрузку на tempdb (в случае MSSQL) или pg_xlog (в случае Postgres).

Отключение сопутствующих механизмов: ППД и RLS

При массовой загрузке данных через РИБ платформа 1С выполняет множество фоновых операций, которые мешают основному процессу. Рассмотрим две основные: полнотекстовый поиск (ППД) и ограничение прав на уровне записей (RLS).

  1. Полнотекстовый поиск: При записи каждого нового объекта система пытается обновить индекс поиска. На время крупного обмена рекомендуется полностью отключать регламентное задание ОбновлениеИндексаПолнотекстовогоПоиска. Это освободит дисковую подсистему от лишних операций чтения-записи.
  2. RLS (Row Level Security): Если загрузка выполняется под пользователем с ограниченными правами, система проверяет права на каждую запись. Выясним причину задержки: проверка RLS — это сложные вложенные запросы к СУБД. Всегда выполняйте обмен под пользователем с полными правами, у которого отключены все ограничения прав доступа. Это позволит платформе игнорировать проверки и записывать данные напрямую.

Проблема версионирования объектов

В современных версиях УТ 11 активно используется механизм ИсторияДанных (Data History). При загрузке объекта через РИБ система может пытаться создать новую версию в истории. Если в сообщении обмена пришло 50 000 документов, нагрузка на таблицу истории данных возрастает экспоненциально.

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

Технические нюансы: IPv6 и антивирусное ПО

Разберем специфическую техническую ошибку, которая приводит к «Аварийному завершению рабочего процесса». Иногда сервер 1С (процесс ragent) тратит значительное время на разрешение имен сетевых узлов через протокол IPv6. Это вызывает микропаузы, которые при обмене РИБ суммируются в минуты и часы. Рекомендуется отключить IPv6 в настройках сетевого адаптера сервера или через реестр Windows, установив приоритет для IPv4.

Также проанализируем работу антивируса. Рабочие процессы 1С (rphost) при обмене активно используют временные файлы в каталоге srvinfo (обычно это C:\Program Files\1cv8\srvinfo). Если антивирус сканирует каждый .xml или .zip файл в режиме реального времени, он блокирует доступ к ним для 1С. Необходимо добавить следующие папки в исключения антивируса:

Итоги и рекомендации

Подводя итог, можно составить пошаговый алгоритм действий при «зависании» РИБ:

  1. Проверьте расположение лицензий — перенесите их на локальный сервер 1С.
  2. В PostgreSQL установите synchronous_commit = off.
  3. Выполняйте обмен под учетной записью с административными правами (без RLS).
  4. Временно отключите полнотекстовый поиск и версионирование объектов.
  5. Убедитесь, что 64-битный сервер 1С имеет достаточно оперативной памяти, так как при разборе XML-файла объемом 100 Мб процесс может потребовать до 1 Гб RAM.
  6. Обновите статистику СУБД перед началом загрузки, чтобы оптимизатор запросов выбрал верный план исполнения.

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

← На главную