Гайд 1С: Очистка зависших таблиц регистрации изменений планов обмена
При некорректной работе узлов обмена возникают следующие симптомы:
- Физический размер базы данных 1С вырастает на сотни гигабайт за счет таблиц регистрации изменений (
_ReferenceXX_ChangeRec,_DocumentXX_ChangeRec). - Катастрофическое замедление операций
INSERT/UPDATEдля всех типовых документов и справочников. - Один из неактивных узлов плана обмена не забирает данные месяцами, аккумулируя регистрацию всех изменений базы.
1. Анализ объема зарегистрированных изменений
Проверьте количество зарегистрированных записей по каждому узлу через обработку РегистрацияИзмененийДляОбменаДанными (из состава БСП) или программным запросом:
Выборка = ПланыОбмена.Синхронизация.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка = ПланыОбмена.Синхронизация.ЭтотУзел() Тогда
Продолжить;
КонецЕсли;
// Получение количества изменений
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*)
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Изменения КАК Изм
|ГДЕ
| Изм.Узел = &Узел";
Запрос.УстановитьПараметр("Узел", Выборка.Ссылка);
// Вывод количества
КонецЦикла;2. Полная или выборочная очистка регистрации изменений
// Полная очистка всех изменений для мертвого узла
УзелОбмена = ПланыОбмена.Синхронизация.НайтиПоКоду("OLD_NODE");
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена);
// Точечная очистка изменений конкретного метаданного
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.РегистрыНакопления.ТоварыНаСкладах);3. Физическая очистка в СУБД (TRUNCATE _ChangeRec)
Если размер таблицы _ChangeRec исчисляется сотнями миллионов строк и штатный метод 1С зависает по таймауту, удалите неактивный узел в конфигураторе/предприятии либо очистите таблицу изменений на уровне СУБД с последующим перезапуском кэша 1С.
Частые вопросы (FAQ)
Почему при записи объекта в 1С всегда происходит обращение к таблицам _ChangeRec?
Если объект включен в состав хотя бы одного плана обмена с авторегистрацией, платформа при каждой транзакции записи выполняет проверку и вставляет строки в соответствующие таблицы _ChangeRec для каждого узла.
Как отключить авторегистрацию изменений для тяжелых регистров?
В дереве метаданных в свойствах состава Плана обмена для конкретного объекта измените свойство 'Авторегистрация' со значения 'Разрешить' на 'Запретить'.
Что происходит с регистрацией изменений при получении квитанции о доставке пакета?
При чтении номера принятого сообщения платформа автоматически удаляет из таблиц _ChangeRec все записи изменений, чей номер отправки меньше или равен подтвержденному номеру.
Можно ли временно отключить регистрацию изменений программно во время групповой обработки?
Да, используйте метод: ПланыОбмена.ЗарегистрироватьИзменения() с избирательным управлением или временно исключите узел из адресатов.