При сопровождении распределенных информационных баз (РИБ) нередко возникает ситуация, когда центральный узел выгружает данные в одну подчиненную базу за пару минут, а обмен с другой базой затягивается на десятки минут при схожих исходных настройках. Разберем основные причины такого поведения и пошагово выясним, как диагностировать и устранить замедления.
1. Разница между клиент-серверным и файловым режимами
Проанализируем архитектуру узлов. Если центральная база функционирует в клиент-серверном варианте (SQL), а подчиненные узлы развернуты в файловом режиме (1Cv8.1CD), разница в скорости формирования и чтения пакетов будет существенной:
Табличные блокировки файловой базы: В файловом режиме при записи данных блокируется вся таблица или файл базы целиком. Любые тяжелые операции считывания и записи XML-сообщений вызывают высокую дисковую нагрузку.
Конкуренция за дисковый ввод-вывод (I/O): Если на одном физическом диске или локальном компьютере одновременно запущены процессы нескольких файловых баз, очередь обращений к диску резко возрастает, что замедляет обработку пакета конкретным узлом.
Вычислительные мощности: В серверном режиме тяжелые запросы к таблицам регистрации обрабатываются СУБД, тогда как в файловой базе всю нагрузку по выборке и формированию структур берет на себя локальный процесс 1cv8.exe.
2. Анализ объема зарегистрированных изменений
Главным фактором, влияющим на размер пакета обмена и время его выгрузки, является объем накопленных изменений в таблицах регистрации (_ChangeRecords). Даже при одинаковом плане обмена количество объектов для передачи в разные узлы может кардинально различаться.
Выясним, как проверить состав выгружаемых объектов:
Через интерфейс программы: Воспользуемся встроенной или внешней обработкой «Регистрация изменений для обмена». В ней можно в реальном времени увидеть дерево объектов метаданных (справочники, документы, регистры) и точное количество записей, ожидающих отправки в конкретный подчиненный узел.
Программный способ: Выполним выборку зарегистрированных данных без фактической выгрузки пакета, используя метод ПланыОбмена.ВыбратьИзменения():
Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбмена, НомерСообщения);
Пока Выборка.Следующий() Цикл
Объект = Выборка.Получить();
Сообщить("К выгрузке: " + Строка(Объект));
КонецЦикла;
Важный момент: Если узел не прислал подтверждение приема предыдущего сообщения (номер принятого сообщения от узла не увеличился), платформа принудительно включает в новый пакет все ранее не подтвержденные данные. Это приводит к разрастанию объема выгрузки в геометрической прогрессии.
Если требуется полностью очистить зависшую или ошибочную регистрацию изменений по узлу, выполним программный вызов:
3. Настройка расписания и риски взаимных блокировок
Рассмотрим настройку частоты запуска фоновых обменов. Слишком частый запуск (например, интервал 700–800 секунд с перерывом 500 секунд) несет в себе следующие риски:
Наложение транзакций: Если длительность выгрузки или загрузки превышает интервал между запусками, регламентные задания начинают конкурировать друг с другом, вызывая ошибки ожидания блокировок.
Конфликты с пользователями: Во время проведения документов пользователями и одновременного выполнения транзакции загрузки данных из узла РИБ платформа может выдавать ошибки транзакционной блокировки данных.
Рекомендуется рассчитывать интервал так, чтобы между завершением самого длительного обмена и следующим стартом оставался достаточный запас времени, а критичные тяжелые выгрузки переносить на нерабочие часы.
4. Специфика выполнения регламентных заданий в файловых базах
Разберем особенности работы планировщика в файловом режиме:
В файловой базе регламентные задания не выполняются отдельной серверной службой. Для их работы требуется запущенный пользовательский сеанс, в котором активен внутренний механизм обработки заданий.
Фоновое задание исполняется от имени текущего авторизованного пользователя либо пользователя с полными правами, если в свойствах задания пользователь явно не определен.
Для обеспечения надежного обмена в файловых базах без постоянного ручного входа рекомендуется использовать запуск сеанса 1С через системный Планировщик задач операционной системы с параметром запуска /Execute <ПутьКВнешнейОбработке> или /C <КлючЗапуска> с последующим автоматическим закрытием программы.
5. Рекомендации по оптимизации обмена РИБ
Управление размером транзакции: В параметрах обмена ограничим количество элементов, обрабатываемых в одной транзакции (рекомендуемое значение — от 50 до 500 элементов). Это снизит нагрузку на оперативную память и предотвратит долгие монопольные захваты таблиц.
Исключения для антивирусного ПО: Добавим каталоги временных файлов (%TEMP%), папки выгрузки пакетов обмена и файлы баз 1Cv8.1CD в список исключений антивируса для устранения задержек при операциях дискового чтения и записи.
Контроль свойства «ОбменДанными.Загрузка»: Проверим модули объектов и подписки на события. При программной записи объектов в процессе загрузки обмена свойство ОбменДанными.Загрузка должно иметь значение Истина, чтобы избежать повторной («эхо») регистрации только что принятых объектов для обратной отправки.