Работа с распределенными информационными базами (РИБ) в 1С:Предприятие 8.3 иногда преподносит неприятные сюрпризы в виде резкого снижения производительности. Типичная ситуация: вы настроили обмен для нового магазина или филиала, данных практически нет, в плане обмена зарегистрированных изменений — ноль, однако процесс выгрузки "зависает" на 20–30 минут. При этом на серверном компьютере тот же процесс занимает считанные секунды.
В этой статье мы подробно разберем, почему файловые базы на платформе 8.3 ведут себя подобным образом, проанализируем программный код обмена и рассмотрим проверенные методики ускорения процесса.
Для начала проанализируем стандартный алгоритм обмена, который используется в конфигурациях на обычных формах (например, "Розница 1.0" или "УПП"). Как правило, задержка происходит в момент вызова метода записи изменений. Рассмотрим типичный фрагмент кода:
Если ЭтоРИБ Тогда
// Создаем новое сообщение
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения;
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);
// Точка зависания: выполнение записи изменений
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, СтруктураНастроекОбменаДанными.КоличествоЭлементовВТранзакцииНаВыгрузкуДанных);
// Завершаем запись сообщения
ЗаписьСообщения.ЗакончитьЗапись;
ЗаписьXML.Закрыть;
КонецЕсли;
Проблема кроется в методе ПланыОбмена.ЗаписатьИзменения. Даже если таблица регистрации изменений пуста, платформа выполняет ряд внутренних операций: проверку конфигурации на наличие изменений, инициализацию транзакций и сканирование метаданных. В файловом варианте работы на ОС Windows 10/11 это может приводить к огромным задержкам из-за механизмов блокировки файлов.
Обратим внимание на второй параметр метода ЗаписатьИзменения — КоличествоЭлементовВТранзакцииНаВыгрузкуДанных. Часто в настройках обмена там стоит значение "0". Рассмотрим, к чему это приводит:
Значение "0" означает, что вся выгрузка данных будет выполнена в рамках одной-единственной транзакции. Для файловой базы это критично: 1С пытается заблокировать таблицы и накопить кэш изменений в оперативной памяти. Если база "пухлая" или диск имеет низкую скорость случайного доступа, система начинает тормозить.
Рекомендация: Установите значение этого параметра в диапазоне от 1000 до 5000. Это заставит систему фиксировать транзакции порциями, что значительно снижает нагрузку на файловую систему и уменьшает вероятность длительных блокировок.
Файловая база 1С (файл 1Cv8.1CD) крайне чувствительна к работе антивирусных мониторов. Программы вроде Kaspersky Endpoint Security могут сканировать каждый поток записи в XML-файл обмена или временные файлы, создаваемые платформой.
Рассмотрим шаги по оптимизации окружения:
.1CD, .1CL, .xml, .tmp в список доверенных.1cv8.exe и 1cv8c.exe.%TEMP%, где 1С формирует сообщение обмена.Попробуем временно отключить антивирус и запустить обмен. Если время выгрузки сократилось с 20 минут до 1 минуты — причина найдена.
Существует специфическая проблема, когда базы, созданные или обновленные на определенных релизах платформы 8.3, начинают некорректно обрабатывать узлы РИБ. Это связано с внутренними таблицами регистрации изменений конфигурации.
Рассмотрим нестандартный, но эффективный способ решения проблемы, если обычное тестирование и исправление (ТИИ) не помогает:
.cf) из основной базы.Как показывает практика, узлы, созданные таким образом или перенесенные из старых версий платформ, работают значительно быстрее. Платформа 8.3 при создании нового узла РИБ может генерировать избыточные записи в системных таблицах обмена, которые и вызывают "зависание".
Если база на "точке" работает долго, а на сервере (в той же файловой копии) — быстро, проблема может быть в накопленных "хвостах" регистрации. Проанализируем ситуацию: иногда в таблицах регистрации изменений (которые имеют префикс _ChngR в структуре БД) остаются битые ссылки или записи о несуществующих объектах.
Разберем алгоритм "лечения":
Это радикальный, но самый надежный способ. Он гарантирует, что все внутренние индексы плана обмена будут перестроены с нуля.
Выясним еще одну возможную причину — механизм RLS. Когда платформа выполняет ЗаписатьИзменения, она проверяет права доступа пользователя, под которым запущен сеанс, ко всем объектам, которые теоретически могут быть выгружены. Если в базе настроены сложные правила RLS, 1С будет строить тяжелые запросы к базе данных при каждой попытке обмена.
Что нужно сделать: Выполняйте обмен под пользователем с полными правами, у которого отключены любые ограничения RLS. В коде это можно проверить так:
Если РольДоступна("ПолныеПрава") Тогда
// Обмен должен идти значительно быстрее
ВыполнитьОбменДанными();
КонецЕсли;
Проанализируем технические параметры Windows, которые влияют на файловую 1С:
TEMP и TMP короткие (например, C:\Temp) и не содержат кириллицы. Это ускоряет работу с временными XML-файлами.Подведем итог: если вы столкнулись с долгой выгрузкой в РИБ, начните с проверки параметров транзакции и исключений антивируса. Если это не помогло — пересоздайте периферийную базу с нуля, так как это самый быстрый способ очистить внутренние ошибки платформы в таблицах регистрации изменений.