Свертка большой распределенной информационной базы (РИБ) — это одна из самых сложных задач, с которыми сталкивается администратор или программист 1С. Основная проблема заключается в том, что стандартные механизмы свертки при работе с огромными массивами данных (сотни гигабайт и миллионы документов) могут выполняться неделями, что абсолютно неприемлемо для работающего бизнеса. Кроме того, в условиях РИБ возникает риск «заспамить» каналы связи гигантскими пакетами обмена с информацией об удалениях.
В этой статье мы подробно разберем, как оптимизировать этот процесс, проанализируем различные методики и выберем наиболее эффективные инструменты для ускорения свертки.
Стандартная обработка СверткаБазы работает по следующему алгоритму: создание документов ввода остатков, пометка документов на удаление и последующее их физическое удаление с контролем ссылочной целостности. На больших объемах этот процесс «упирается» в несколько ограничений:
Рассмотрим подход, который позволяет сократить время очистки в разы без использования прямого SQL. Суть заключается в разделении процесса на формирование остатков и параллельную очистку данных.
Сначала мы создаем документы «Корректировка записей регистров» (КЗР) или специализированные документы ввода остатков на выбранную дату. Это делается стандартными средствами, так как этот этап обычно проходит достаточно быстро. Самая трудоемкая часть — удаление старых движений и документов — выполняется следующим образом:
Шаг 1: Очистка движений регистров. Вместо удаления документов целиком, мы сначала очищаем движения регистров накопления и сведений. Проанализируем ситуацию: удаление записей в регистрах в несколько потоков через фоновые задания работает значительно быстрее, чем пометка на удаление самих документов. Для этого можно написать простую обработку, которая делит набор регистров на группы и запускает их очистку параллельно.
Шаг 2: Фоновое удаление документов. После того как остатки зафиксированы, а движения старых документов очищены, сами документы перестают влиять на учет. Их можно помечать на удаление «неспешно» в течение недели в фоновом режиме, порциями по 1000–5000 штук, чтобы не блокировать работу пользователей.
// Пример логики запуска фонового удаления
ПараметрыЗапуска = Новый Структура("ДатаСвертки, МассивДокументов");
ФоновыеЗадания.Выполнить("МойМодуль.ПроцедураУдаления", ПараметрыЗапуска);
Выясним причину, почему это самый быстрый способ. Использование DELETE или TRUNCATE на уровне СУБД позволяет обойти объектную логику 1С и механизмы регистрации изменений. Внимание: этот метод требует глубокого понимания структуры таблиц 1С и должен выполняться только после создания резервной копии.
Для ускорения процесса на уровне SQL рекомендуется:
РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Ложь);
// Аналогично для всех тяжелых регистров
_AccumReg123) по условию даты._DocumentChngRec), иначе при первом же обмене система попытается выгрузить «пустые» ссылки на удаленные данные.Этот метод позволяет свернуть 1–2 года данных за одни выходные даже на очень нагруженных базах.
Разберем по шагам специфический метод для распределенных систем. Если база является центральным узлом РИБ, можно воспользоваться механизмом создания начального образа.
Проанализируем этот момент подробнее: если мы просто удалим миллион документов, 1С создаст миллион записей в таблице регистрации изменений для каждого магазина. Чтобы этого избежать, используем программное отключение регистрации:
ПланыОбмена.УстановитьРегистрациюИзменений(УзелМагазин, Ложь);
// Проводим удаление
ПланыОбмена.УстановитьРегистрациюИзменений(УзелМагазин, Истина);
Иногда проще не удалять старое, а перенести нужное в новое. Рассмотрим этот алгоритм:
GUID и кодами, которые были в старой базе.После физического удаления данных размер файлов базы данных (MDF/LDF) на диске не уменьшится автоматически. Чтобы вернуть место операционной системе и восстановить производительность, необходимо выполнить следующие действия:
Подведем итог: для свертки большой РИБ наиболее эффективным является сочетание прямой работы с SQL (для очистки движений) и многопоточного удаления документов в 1С с обязательным контролем регистрации изменений в плане обмена. Это позволяет сократить время выполнения процедуры с недель до десятков часов.