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

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

1. Разница между клиент-серверным и файловым режимами

Проанализируем архитектуру узлов. Если центральная база функционирует в клиент-серверном варианте (SQL), а подчиненные узлы развернуты в файловом режиме (1Cv8.1CD), разница в скорости формирования и чтения пакетов будет существенной:

  1. Табличные блокировки файловой базы: В файловом режиме при записи данных блокируется вся таблица или файл базы целиком. Любые тяжелые операции считывания и записи XML-сообщений вызывают высокую дисковую нагрузку.
  2. Конкуренция за дисковый ввод-вывод (I/O): Если на одном физическом диске или локальном компьютере одновременно запущены процессы нескольких файловых баз, очередь обращений к диску резко возрастает, что замедляет обработку пакета конкретным узлом.
  3. Вычислительные мощности: В серверном режиме тяжелые запросы к таблицам регистрации обрабатываются СУБД, тогда как в файловой базе всю нагрузку по выборке и формированию структур берет на себя локальный процесс 1cv8.exe.

2. Анализ объема зарегистрированных изменений

Главным фактором, влияющим на размер пакета обмена и время его выгрузки, является объем накопленных изменений в таблицах регистрации (_ChangeRecords). Даже при одинаковом плане обмена количество объектов для передачи в разные узлы может кардинально различаться.

Выясним, как проверить состав выгружаемых объектов:

  1. Через интерфейс программы: Воспользуемся встроенной или внешней обработкой «Регистрация изменений для обмена». В ней можно в реальном времени увидеть дерево объектов метаданных (справочники, документы, регистры) и точное количество записей, ожидающих отправки в конкретный подчиненный узел.
  2. Программный способ: Выполним выборку зарегистрированных данных без фактической выгрузки пакета, используя метод ПланыОбмена.ВыбратьИзменения():

Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбмена, НомерСообщения);
Пока Выборка.Следующий() Цикл
    Объект = Выборка.Получить();
    Сообщить("К выгрузке: " + Строка(Объект));
КонецЦикла;

Важный момент: Если узел не прислал подтверждение приема предыдущего сообщения (номер принятого сообщения от узла не увеличился), платформа принудительно включает в новый пакет все ранее не подтвержденные данные. Это приводит к разрастанию объема выгрузки в геометрической прогрессии.

Если требуется полностью очистить зависшую или ошибочную регистрацию изменений по узлу, выполним программный вызов:

ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена);

3. Настройка расписания и риски взаимных блокировок

Рассмотрим настройку частоты запуска фоновых обменов. Слишком частый запуск (например, интервал 700–800 секунд с перерывом 500 секунд) несет в себе следующие риски:

  1. Наложение транзакций: Если длительность выгрузки или загрузки превышает интервал между запусками, регламентные задания начинают конкурировать друг с другом, вызывая ошибки ожидания блокировок.
  2. Конфликты с пользователями: Во время проведения документов пользователями и одновременного выполнения транзакции загрузки данных из узла РИБ платформа может выдавать ошибки транзакционной блокировки данных.

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

4. Специфика выполнения регламентных заданий в файловых базах

Разберем особенности работы планировщика в файловом режиме:

  1. В файловой базе регламентные задания не выполняются отдельной серверной службой. Для их работы требуется запущенный пользовательский сеанс, в котором активен внутренний механизм обработки заданий.
  2. Фоновое задание исполняется от имени текущего авторизованного пользователя либо пользователя с полными правами, если в свойствах задания пользователь явно не определен.
  3. Для обеспечения надежного обмена в файловых базах без постоянного ручного входа рекомендуется использовать запуск сеанса 1С через системный Планировщик задач операционной системы с параметром запуска /Execute <ПутьКВнешнейОбработке> или /C <КлючЗапуска> с последующим автоматическим закрытием программы.

5. Рекомендации по оптимизации обмена РИБ

  1. Управление размером транзакции: В параметрах обмена ограничим количество элементов, обрабатываемых в одной транзакции (рекомендуемое значение — от 50 до 500 элементов). Это снизит нагрузку на оперативную память и предотвратит долгие монопольные захваты таблиц.
  2. Исключения для антивирусного ПО: Добавим каталоги временных файлов (%TEMP%), папки выгрузки пакетов обмена и файлы баз 1Cv8.1CD в список исключений антивируса для устранения задержек при операциях дискового чтения и записи.
  3. Контроль свойства «ОбменДанными.Загрузка»: Проверим модули объектов и подписки на события. При программной записи объектов в процессе загрузки обмена свойство ОбменДанными.Загрузка должно иметь значение Истина, чтобы избежать повторной («эхо») регистрации только что принятых объектов для обратной отправки.
← На главную