Как быстро и эффективно свернуть базу 1С:Управление торговлей 10.3 на MS SQL

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Свертка крупной информационной базы — это всегда сложный и ресурсоемкий процесс. Ситуация становится критической, когда штатная обработка BaseTrimming работает несколько суток или вовсе вылетает с ошибками, а наличие распределенных узлов (РБД) превращает синхронизацию удаленных данных в невыполнимую задачу. В данной статье мы проанализируем, как профессионально подойти к вопросу уменьшения объема базы УТ 10.3, разберем технические приемы на уровне MS SQL и выясним, как сохранить производительность файловых узлов у периферийных пользователей.

Почему штатная свёртка работает медленно?

Рассмотрим основные причины, по которым стандартные инструменты 1С не справляются с базами объемом от 20 Гб и выше. Во-первых, это объектная модель: при удалении каждого документа система выполняет проверку ссылочной целостности, блокирует таблицы и пересчитывает итоги. Во-вторых, регистры сведений (например, цены номенклатуры) в УТ 10.3 могут содержать миллионы записей, обработка которых через НаборЗаписей занимает колоссальное время. Проанализируем ситуацию с РБД: удаление миллионов строк порождает огромный объем данных в таблицах регистрации изменений, что фактически парализует обмен данными.

Подготовка SQL-сервера к агрессивной свёртке

Прежде чем приступать к любым манипуляциям с данными, мы должны оптимизировать среду MS SQL. Разберем шаги, которые позволят ускорить процесс в разы:

  1. Модель восстановления (Recovery Model): Перед началом работ обязательно переведем базу данных в режим Simple. Это предотвратит бесконтрольный рост файла лога транзакций (LDF), который при массовом удалении может превысить размер самой базы.
  2. Отключение индексов: При массовом удалении строк SQL-сервер тратит ресурсы на обновление некластерных индексов. Проанализируем возможность их временного отключения. После удаления данных индексы нужно перестроить заново (Rebuild), что будет гораздо быстрее, чем их постоянное обновление в процессе работы.
  3. Очистка временных таблиц и логов: Регулярно проверяйте место на диске, так как операции Shrink после удаления данных потребуют свободного пространства для маневра.

Метод 1: Прямое удаление и ввод остатков (Варварский, но быстрый)

Если время ограничено, мы можем прибегнуть к методу «ручной» свёртки. Посмотрим на алгоритм действий:

  1. Создаем документы «Ввод остатков» по всем ключевым регистрам (Склады, Взаиморасчеты, Денежные средства) на дату свёртки (например, 01.01.2018).
  2. Используем внешние обработки для «прямого» удаления объектов. В отличие от штатного удаления, такие инструменты обходят часть проверок, что ускоряет процесс.
  3. Запускаем процедуру Тестирования и Исправления (ТиИ) с установленными галочками «Очищать ссылки» и «Удалять объекты», чтобы вычистить «битые» ссылки из базы.

Метод 2: Работа с регистром цен через SQL

Регистр цен — самое узкое место УТ 10.3. Выясним причину: при свёртке штатная обработка пытается перебирать записи, что приводит к зависанию. Эффективнее всего использовать стратегию полной очистки и перезаписи актуальных данных:

Рассмотрим программную логику этого процесса:


// 1. Выгружаем актуальный срез последних цен во временную таблицу или ТЗ
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСвертки)";
ТаблицаЦен = Запрос.Выполнить().Выгрузить();

// 2. Очищаем регистр полностью через SQL команду TRUNCATE (требует прямых запросов)
// Или через пустой набор записей в 1С (но это медленнее для миллионов строк)
Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Записать(); 

// 3. Загружаем актуальные данные обратно
Для Каждого Строка Из ТаблицаЦен Цикл
    МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи();
    ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Строка);
    МенеджерЗаписи.Записать();
КонецЦикла;

Особенности работы с Распределенными Базами (РБД)

Ситуация в РБД осложняется тем, что периферийные узлы часто являются файловыми. Попытка передать туда изменения об удалении 10 Гб данных через XML-пакет приведет к краху системы. Проанализируем правильную стратегию:

Метод «Связки» для сохранения истории (Архивная база)

Часто менеджеры выступают против свёртки, так как им нужны данные прошлых периодов. Разберем, как удовлетворить их требования, не раздувая рабочую базу:

  1. Создаем полную копию базы перед свёрткой и называем её «Архив_2017».
  2. В рабочей базе выполняем «жесткую» свертку, удаляя всё, что старше года.
  3. В интерфейс рабочей базы (например, в карточку номенклатуры или контрагента) добавляем кнопку «История продаж (архив)».
  4. При нажатии система через COM-соединение или прямой SQL-запрос обращается к «Архивной базе» и показывает данные в удобном виде.

Таким образом, рабочая база остается легкой и быстрой, а исторические данные остаются доступными для анализа без нагрузки на текущие процессы.

Оптимизация итогов и очистка «мусора»

Выясним, что еще можно сделать для ускорения процесса. Перед началом массового удаления документов крайне важно отключить расчет итогов. В 1С это делается через встроенные возможности управления итогами:


// Отключение использования итогов для ускорения удаления
Для Каждого Регистр Из РегистрыНакопления Цикл
    Регистр.УстановитьИспользованиеИтогов(Ложь);
КонецЦикла;

После завершения свёртки и формирования документов ввода остатков, итоги необходимо включить обратно и пересчитать. Это позволит избежать пересчета остатков при удалении каждой отдельной строки документа 2014 года.

Также проанализируем таблицу _InfoRegDataStatus, если в базе включено версионирование объектов. Зачастую она занимает до 40% объема всей БД. Её можно смело очищать перед свёрткой, так как хранить версии удаляемых документов не имеет смысла.

Резюме

Свёртка УТ 10.3 на 20 Гб не должна занимать 4 дня. Используя перевод SQL в модель Simple, прямое удаление данных, пересоздание узлов РБД и метод архивной базы, можно сократить время процедуры до нескольких часов. Помните, что главной целью является не просто удаление строк, а получение стабильно работающей системы, где файловые узлы вновь становятся быстрыми и отзывчивыми.

← На главную