Процесс очистки базы данных от неиспользуемых элементов — это ответственная операция, которая в крупных информационных системах может занимать значительное время. Часто возникают ситуации, когда запущенное удаление помеченных объектов требуется остановить: из-за начала рабочего дня, необходимости проведения других регламентных работ или случайного запуска. В этой статье мы подробно разберем, насколько безопасно прерывать этот процесс, что происходит "под капотом" платформы 1С и СУБД, и какие последствия могут ожидать администратора.
Для того чтобы понять последствия прерывания, проанализируем, как именно платформа 1С:Предприятие взаимодействует с базой данных во время удаления. В современных версиях платформы (начиная с 8.3) стандартная обработка «Удаление помеченных объектов» работает по принципу «один объект — одна транзакция». Рассмотрим подробнее, что это означает на практике.
Когда вы запускаете процесс удаления, система не открывает одну гигантскую транзакцию на все 10 000 или 100 000 объектов. Вместо этого для каждого конкретного объекта (или небольшой группы объектов в некоторых режимах) выполняется следующая последовательность действий:
Выясним причину безопасности прерывания: если вы нажимаете кнопку «Отмена» или принудительно завершаете сеанс, платформа просто перестает брать следующий объект из очереди. Та транзакция, которая выполнялась в конкретную секунду прерывания, будет откачена (Rollback) средствами СУБД, и объект останется в базе помеченным на удаление. Все объекты, удаленные до момента нажатия кнопки, будут стерты окончательно и успешно.
Проанализируем ситуацию, описанную одним из участников обсуждения. При удалении более 23 000 объектов процесс был прерван спустя 25 минут. При повторном запуске выяснилось, что количество помеченных объектов сократилось до 21 599. Это наглядно доказывает, что:
Рассмотрим подробнее режимы удаления, доступные в современных конфигурациях на платформе 8.3.18 и выше. Выбор режима напрямую влияет на то, как база данных реагирует на прерывание.
1. Интерактивное (стандартное) удаление: выполняется в контексте текущего сеанса пользователя. Если закрыть программу через «Диспетчер задач» или завершить сеанс в консоли кластера, транзакция текущего объекта прервется. Это безопасно, так как СУБД (будь то MS SQL Server или PostgreSQL) гарантирует атомарность операции.
2. Фоновое удаление: это наиболее прогрессивный метод. Процесс запускается как отдельное фоновое задание на сервере. Рассмотрим его преимущества:
ФоновыеЗадания.Остановить() происходит корректно: платформа дожидается завершения обработки текущего объекта и штатно завершает поток.Существует распространенное опасение, что прерывание удаления может привести к появлению объектов, ссылающихся "в никуда". Разберем по шагам, почему при штатной работе платформы это практически невозможно:
Перед тем как физически удалить запись, 1С выполняет поиск ссылок. Если объект удален, это означает, что на момент фиксации транзакции ссылок на него не существовало. Если в момент удаления другого объекта вы прервали процесс, этот объект просто останется в базе. Логическая целостность при этом не нарушается.
Однако, проанализируем исключительные случаи, когда проблемы все же могут возникнуть:
ОбменДанными.Загрузка = Истина), прерывание может оставить базу в промежуточном состоянии.Если вам пришлось прервать удаление большого массива данных, мы рекомендуем выполнить следующие действия для полного спокойствия:
Во-первых, при первой возможности запустите процесс удаления повторно. Платформа заново проанализирует оставшиеся объекты. Стоит учитывать, что основное время при удалении тратится не на само стирание записей, а на поиск ссылок. Поэтому повторный запуск снова потребует времени на анализ дерева связей.
Во-вторых, если есть подозрения на некорректное поведение системы (например, прерывание произошло из-за ошибки СУБД), полезно провести процедуру «Тестирование и исправление» (ТиИ). В современных версиях платформы (8.3.24+) ТиИ поддерживает многопоточность, что значительно ускоряет проверку логической и ссылочной целостности. В меню конфигуратора выберите:
Администрирование -> Тестирование и исправление...
Установите флаги «Проверка ссылочной целостности» и «Пересчет итогов», если это необходимо.
Подводя итог, можно утверждать: прерывание удаления помеченных объектов в 1С 8.3 — это безопасная процедура. Платформа и СУБД надежно защищают данные от "разваливания" благодаря транзакционному механизму. Основным негативным последствием будет лишь потеря времени, так как при следующем запуске системе придется заново строить индекс ссылок для оставшихся объектов. Для обеспечения максимальной стабильности рекомендуется отдавать предпочтение штатным средствам удаления и использовать фоновый режим работы.