При выполнении сверки информационной базы или масштабной очистке устаревших документов пользователи и администраторы часто сталкиваются с критическим замедлением работы 1С. Штатный механизм «Удаление помеченных объектов» при попытке обработать десятки тысяч документов в файловом варианте базы данных (файл .1CD) может выполнять проверку ссылок в течение десятков часов.
Разберем основные причины такого поведения платформы и проанализируем эффективные способы ускорения процесса удаления объектов.
Проанализируем технические особенности работы файлового движка 1С. При передаче на стандартную обработку удаления сразу огромного массива (например, 100 000 документов) платформа формирует масштабные внутренние запросы для поиска ссылочной целостности по всем метаданным конфигурации. В файловом режиме все эти операции выполняются в один поток, что создает колоссальную нагрузку на дисковый ввод-вывод (I/O). Попытка единовременно проверить гигантский объем данных приводит к нелинейному росту времени выполнения операции.
Одним из самых действенных и проверенных способов решения проблемы является использование специализированных внешних обработок из комплекта «Инструменты разработчика» (ИР) от TormozIT.
Рассмотрим, как задействовать этот инструментарий:
Перед запуском длительной процедуры очистки выполним комплекс подготовительных работ, которые снизят нагрузку на дисковую подсистему и ускорят процесс поиска зависимостей:
.1CD и освободить неиспользуемые страницы памяти.Посмотрим на ещё одно важнейшее правило: не передавайте платформе на проверку всё количество объектов за один раз. Разберем, как построить порционное удаление.
Разделим массив помеченных на удаление документов на небольшие пачки — например, по 500–2000 штук (в зависимости от вида документов и количества связей). Проверка ссылочной целостности для малого пакета выполняется платформой за считанные секунды, а итоговая суммарная скорость обработки всех 100 000 документов сократится с 20 часов до нескольких десятков минут.
Для реализации порционного удаления методами платформы можно использовать следующий пример программного кода:
МассивДляУдаления = Новый Массив;
Счетчик = 0;
Пока Выборка.Следующий() Цикл
МассивДляУдаления.Добавить(Выборка.Ссылка);
Счетчик = Счетчик + 1;
Если Счетчик % 1000 = 0 Тогда
УдалитьОбъекты(МассивДляУдаления, Истина);
МассивДляУдаления.Очистить();
КонецЕсли;
КонецЦикла;
Если МассивДляУдаления.Количество() > 0 Тогда
УдалитьОбъекты(МассивДляУдаления, Истина);
КонецЕсли;
Если программные методы и сторонние обработки всё еще упираются в ограничения файлового движка, рассмотрим изменения рабочей среды:
.dt и развернем её на сервере СУБД (PostgreSQL или MS SQL Server). Оптимизатор SQL-сервера выполняет соединения временных таблиц при проверке ссылок в десятки раз быстрее. После завершения очистки выполним обратную выгрузку в файловый вариант..1CD на нем и запустим удаление. Отсутствие задержек физического накопителя существенно увеличит скорость операций чтения и записи.