Как ускорить процесс удаления помеченных объектов в файловой базе 1С?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При выполнении сверки информационной базы или масштабной очистке устаревших документов пользователи и администраторы часто сталкиваются с критическим замедлением работы 1С. Штатный механизм «Удаление помеченных объектов» при попытке обработать десятки тысяч документов в файловом варианте базы данных (файл .1CD) может выполнять проверку ссылок в течение десятков часов.

Разберем основные причины такого поведения платформы и проанализируем эффективные способы ускорения процесса удаления объектов.

Выясним причину высокой задержки при удалении

Проанализируем технические особенности работы файлового движка 1С. При передаче на стандартную обработку удаления сразу огромного массива (например, 100 000 документов) платформа формирует масштабные внутренние запросы для поиска ссылочной целостности по всем метаданным конфигурации. В файловом режиме все эти операции выполняются в один поток, что создает колоссальную нагрузку на дисковый ввод-вывод (I/O). Попытка единовременно проверить гигантский объем данных приводит к нелинейному росту времени выполнения операции.

Использование подсистемы «Инструменты разработчика» (ИР)

Одним из самых действенных и проверенных способов решения проблемы является использование специализированных внешних обработок из комплекта «Инструменты разработчика» (ИР) от TormozIT.

Рассмотрим, как задействовать этот инструментарий:

  1. Воспользуемся обработкой «Удаление объектов с контролем ссылок» из состава ИР. Алгоритмы поиска ссылок в данном инструменте оптимизированы и работают существенно быстрее стандартной штатной обработки 1С.
  2. Если проверка ссылочной целостности не требуется (например, вы полностью уверены в корректности выполненной сверки и предварительно распровели документы), изменим подход. В обработке «Подбор и обработка объектов» из комплекта ИР установим флаг «Без контроля записи» и выполним прямое программное удаление объектов.

Предварительное обслуживание и подготовка базы данных

Перед запуском длительной процедуры очистки выполним комплекс подготовительных работ, которые снизят нагрузку на дисковую подсистему и ускорят процесс поиска зависимостей:

  1. Запуск процедуры «Тестирование и исправление»: выполним процедуру ТиИ в Конфигураторе 1С с включенными флагами «Сжатие таблиц информационной базы» и «Реструктуризация таблиц информационной базы». Это позволит избавиться от фрагментации файла .1CD и освободить неиспользуемые страницы памяти.
  2. Отключим Журнал регистрации: на время массового удаления объектов в настройках администрирования или через Конфигуратор временно отключим запись событий в журнал регистрации, чтобы платформа не тратила ресурсы диска на фиксацию каждого шага удаления.
  3. Очистим кэш и отключим полнотекстовый поиск: снимем с выполнения регламентные задания, отключим индекс полнотекстового поиска и очистим локальный кэш пользователя.

Попакетная (порционная) обработка данных

Посмотрим на ещё одно важнейшее правило: не передавайте платформе на проверку всё количество объектов за один раз. Разберем, как построить порционное удаление.

Разделим массив помеченных на удаление документов на небольшие пачки — например, по 500–2000 штук (в зависимости от вида документов и количества связей). Проверка ссылочной целостности для малого пакета выполняется платформой за считанные секунды, а итоговая суммарная скорость обработки всех 100 000 документов сократится с 20 часов до нескольких десятков минут.

Для реализации порционного удаления методами платформы можно использовать следующий пример программного кода:


МассивДляУдаления = Новый Массив;
Счетчик = 0;

Пока Выборка.Следующий() Цикл
    МассивДляУдаления.Добавить(Выборка.Ссылка);
    Счетчик = Счетчик + 1;
    
    Если Счетчик % 1000 = 0 Тогда
        УдалитьОбъекты(МассивДляУдаления, Истина);
        МассивДляУдаления.Очистить();
    КонецЕсли;
КонецЦикла;

Если МассивДляУдаления.Количество() > 0 Тогда
    УдалитьОбъекты(МассивДляУдаления, Истина);
КонецЕсли;

Альтернативные способы оптимизации среды

Если программные методы и сторонние обработки всё еще упираются в ограничения файлового движка, рассмотрим изменения рабочей среды:

  1. Временный перенос в клиент-серверный режим: выгрузим базу данных в файл .dt и развернем её на сервере СУБД (PostgreSQL или MS SQL Server). Оптимизатор SQL-сервера выполняет соединения временных таблиц при проверке ссылок в десятки раз быстрее. После завершения очистки выполним обратную выгрузку в файловый вариант.
  2. Использование RAM-диска: создадим в оперативной памяти компьютера виртуальный RAM-диск, разместим файл .1CD на нем и запустим удаление. Отсутствие задержек физического накопителя существенно увеличит скорость операций чтения и записи.
← На главную