Ситуация, когда две идентичные по конфигурации и объему данных базы 1С демонстрируют колоссальную разницу в скорости обмена (10 минут против 4 часов), является классической проблемой для распределенных информационных баз (РИБ), работающих в файловом режиме. Разберем по шагам, почему в подчиненном узле 1С:Бухгалтерия КОРП процессы загрузки и выгрузки могут тормозить, и как мы можем это исправить.
Прежде чем приступать к оптимизации кода, проанализируем системное окружение. Для файловых баз .1CD критически важна скорость работы дисковой подсистемы и отсутствие внешних блокировок от операционной системы.
Проверим настройки антивируса. Это одна из самых частых причин замедления. Если в центральной базе папка с данными добавлена в исключения, а в подчиненной — нет, антивирус будет сканировать каждый блок файла базы данных при записи. Учитывая, что при загрузке 400 документов происходит огромное количество обращений к диску, это может замедлить процесс в десятки раз. Необходимо убедиться, что исключены:
1Cv8.1CD).TEMP), так как именно там 1С распаковывает XML-сообщения обмена.Message_XXX_YYY.xml.Проанализируем фрагментацию данных. В процессе активного обмена файл базы данных постоянно расширяется и перезаписывается. Разберем два вида фрагментации:
1Cv8.1CD на диске. Если он разбит на тысячи фрагментов, головка жесткого диска (в случае HDD) будет совершать лишние движения. Рекомендуется выполнить дефрагментацию.Чтобы понять, на каком именно этапе происходит затык (выгрузка данных из узла или загрузка в него), нам необходимо выполнить замер кода. Это позволит выяснить, какая строчка конфигурации или какой объект метаданных вызывает наибольшее ожидание.
Запустим подчиненный узел в режиме "Конфигуратор" и включим отладку. В режиме "Предприятие" инициируем обмен и воспользуемся инструментом "Замер производительности". Проанализируем полученную таблицу. Особое внимание уделим следующим моментам:
УправлениеПолнотекстовымПоиском.Для выявления проблемных участков кода мы можем использовать программный доступ к замеру. Например, чтобы понять, сколько времени занимает загрузка конкретного объекта, можно вставить в модули обмена следующий код:
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Код загрузки объекта или вызова типового механизма
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
Если Длительность > 1000 Тогда // Если дольше 1 секунды
ЗаписьЖурналаРегистрации("ОбменДанными.Производительность", УровеньЖурналаРегистрации.Предупреждение, , , "Долгая загрузка объекта: " + ОписаниеОбъекта);
КонецЕсли;
Выясним, не является ли "узким горлышком" сам журнал регистрации. В файловых базах журнал (файл 1cv8.lgd или .lgp) растет синхронно с действиями пользователей. При загрузке 400 документов в журнал записываются тысячи событий. Если файл журнала весит несколько гигабайт, запись в него новых строк может существенно замедляться.
Рекомендуется выполнить сокращение журнала регистрации или на время обмена установить уровень детализации "Регистрировать только ошибки". Также проверим настройки кэширования Windows для диска, на котором лежит база. Если кэширование записи отключено, каждая операция будет дожидаться физического подтверждения от диска, что фатально для скорости файловой 1С.
В подчиненном узле часто "залипают" фоновые задания. Рассмотрим ситуацию: когда вы запускаете обмен, в базе может параллельно стартовать задание по извлечению текста для поиска или мониторингу классификаторов. В файловом режиме 1С использует блокировку на уровне всей таблицы. Это значит, что пока одно задание читает таблицу, другое не может в нее записывать.
Проанализируем список регламентных заданий в подчиненном узле. Попробуем отключить все лишние задания и запустить обмен повторно. Если скорость возрастет — причина найдена. Для стабильной работы файлового обмена лучше выделять отдельный сеанс, в котором не выполняются никакие другие операции.
Если тестирование и исправление (ТиИ), очистка кэша и настройка антивируса не принесли результатов, существует вероятность внутреннего логического сбоя в регистрации изменений или структуре конкретного узла. Разберем, как правильно пересоздать узел для исправления ситуации:
Полный.Если в новом узле обмен проходит за 10-15 минут, значит, в старом подчиненном узле была повреждена таблица регистрации изменений или имелись скрытые проблемы с объектом ПланыОбменаМенеджер. Помните, что при создании образа в файловой версии 1С критически важно, чтобы в момент формирования образа никто не работал в центральной базе, так как блокировки могут привести к некорректному переносу состояния объектов.
Мы выяснили, что разница в скорости чаще всего вызвана не "плохим кодом", а особенностями работы файловой СУБД 1С с системными ресурсами. Резюмируем наши действия:
.1CD.Соблюдение этих правил позволит поддерживать скорость обмена данными в БП КОРП на высоком уровне даже при росте объема документов.