Свертка крупной информационной базы — это всегда сложный и ресурсоемкий процесс. Ситуация становится критической, когда штатная обработка BaseTrimming работает несколько суток или вовсе вылетает с ошибками, а наличие распределенных узлов (РБД) превращает синхронизацию удаленных данных в невыполнимую задачу. В данной статье мы проанализируем, как профессионально подойти к вопросу уменьшения объема базы УТ 10.3, разберем технические приемы на уровне MS SQL и выясним, как сохранить производительность файловых узлов у периферийных пользователей.
Рассмотрим основные причины, по которым стандартные инструменты 1С не справляются с базами объемом от 20 Гб и выше. Во-первых, это объектная модель: при удалении каждого документа система выполняет проверку ссылочной целостности, блокирует таблицы и пересчитывает итоги. Во-вторых, регистры сведений (например, цены номенклатуры) в УТ 10.3 могут содержать миллионы записей, обработка которых через НаборЗаписей занимает колоссальное время. Проанализируем ситуацию с РБД: удаление миллионов строк порождает огромный объем данных в таблицах регистрации изменений, что фактически парализует обмен данными.
Прежде чем приступать к любым манипуляциям с данными, мы должны оптимизировать среду MS SQL. Разберем шаги, которые позволят ускорить процесс в разы:
Simple. Это предотвратит бесконтрольный рост файла лога транзакций (LDF), который при массовом удалении может превысить размер самой базы.Shrink после удаления данных потребуют свободного пространства для маневра.Если время ограничено, мы можем прибегнуть к методу «ручной» свёртки. Посмотрим на алгоритм действий:
Регистр цен — самое узкое место УТ 10.3. Выясним причину: при свёртке штатная обработка пытается перебирать записи, что приводит к зависанию. Эффективнее всего использовать стратегию полной очистки и перезаписи актуальных данных:
Рассмотрим программную логику этого процесса:
// 1. Выгружаем актуальный срез последних цен во временную таблицу или ТЗ
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСвертки)";
ТаблицаЦен = Запрос.Выполнить().Выгрузить();
// 2. Очищаем регистр полностью через SQL команду TRUNCATE (требует прямых запросов)
// Или через пустой набор записей в 1С (но это медленнее для миллионов строк)
Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Записать();
// 3. Загружаем актуальные данные обратно
Для Каждого Строка Из ТаблицаЦен Цикл
МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Строка);
МенеджерЗаписи.Записать();
КонецЦикла;
Ситуация в РБД осложняется тем, что периферийные узлы часто являются файловыми. Попытка передать туда изменения об удалении 10 Гб данных через XML-пакет приведет к краху системы. Проанализируем правильную стратегию:
_ChangeRec через SQL. Это предотвратит попытку системы зарегистрировать удаление каждого старого документа для обмена.Часто менеджеры выступают против свёртки, так как им нужны данные прошлых периодов. Разберем, как удовлетворить их требования, не раздувая рабочую базу:
COM-соединение или прямой SQL-запрос обращается к «Архивной базе» и показывает данные в удобном виде.Таким образом, рабочая база остается легкой и быстрой, а исторические данные остаются доступными для анализа без нагрузки на текущие процессы.
Выясним, что еще можно сделать для ускорения процесса. Перед началом массового удаления документов крайне важно отключить расчет итогов. В 1С это делается через встроенные возможности управления итогами:
// Отключение использования итогов для ускорения удаления
Для Каждого Регистр Из РегистрыНакопления Цикл
Регистр.УстановитьИспользованиеИтогов(Ложь);
КонецЦикла;
После завершения свёртки и формирования документов ввода остатков, итоги необходимо включить обратно и пересчитать. Это позволит избежать пересчета остатков при удалении каждой отдельной строки документа 2014 года.
Также проанализируем таблицу _InfoRegDataStatus, если в базе включено версионирование объектов. Зачастую она занимает до 40% объема всей БД. Её можно смело очищать перед свёрткой, так как хранить версии удаляемых документов не имеет смысла.
Свёртка УТ 10.3 на 20 Гб не должна занимать 4 дня. Используя перевод SQL в модель Simple, прямое удаление данных, пересоздание узлов РБД и метод архивной базы, можно сократить время процедуры до нескольких часов. Помните, что главной целью является не просто удаление строк, а получение стабильно работающей системы, где файловые узлы вновь становятся быстрыми и отзывчивыми.