Обновление "Универсальное удаление данных из 1С" релиз 1.0.0.12

Изменено

  • Существенно ускорено удаление данных средствами СУБД на больших базах (MS SQL и PostgreSQL). Ключевая таблица идентификаторов теперь типизирована под тип ссылок 1С и индексируется: для MS SQL — binary(16) NOT NULL PRIMARY KEY (вместо UNIQUEIDENTIFIER без индекса), для PostgreSQL — bytea NOT NULL PRIMARY KEY. Это убирает неявное преобразование типов в условиях отбора и позволяет СУБД использовать индексный доступ (seek) по полю-регистратору вместо полного сканирования регистров. На крупных базах фаза удаления сокращается с десятков часов до десятков минут.
  • Перед фазой удаления добавлено обновление статистики ключевой таблицы (UPDATE STATISTICS / ANALYZE) для выбора оптимального плана.
  • Для MS SQL убрана единая транзакция (BEGIN/COMMIT) на весь скрипт: удаление по каждой таблице теперь автокоммитится. Это снимает разрастание журнала транзакций и многочасовой откат при сбое на больших базах. Целостность обеспечивается резервной копией перед операцией и выполнением в монопольном режиме (рекомендуется также временно перевести БД в модель восстановления SIMPLE).
  • Таблица идентификаторов теперь временная: для MS SQL — локальная #IDs (с проверкой через tempdb..), для PostgreSQL — CREATE TEMP TABLE. Временная таблица изолирована по сессии, поэтому параллельные удаления в одной базе больше не конфликтуют по общей таблице, дополнительно снижается нагрузка на журнал рабочей БД и таблица автоматически очищается по завершении сессии.
  • Генерация текста скрипта вынесена в общую функцию СформироватьТекстСкрипта модуля объекта — раньше она дублировалась в модулях управляемой и обычной форм. Теперь обе формы используют единую логику, что исключает расхождение их поведения.

Исправление ошибок

  • Для MS SQL устранён риск падения скрипта при повторной вставке одного и того же идентификатора: первичный ключ создаётся с IGNORE_DUP_KEY = ON (аналог ON CONFLICT DO NOTHING в PostgreSQL). Первичная вставка корневых идентификаторов в PostgreSQL также защищена ON CONFLICT DO NOTHING.
  • Перед созданием таблицы идентификаторов добавлено её удаление при наличии (DR OP TABLE IF EXISTS / IF OBJECT_ID(...) DR OP TABLE) — для корректного повторного запуска скрипта после сбоя.
  • Восстановлена работа на старых версиях платформы: функция УбратьВерсиюИзИмениТаблицы переписана без СтрНайтиПоРегулярномуВыражению (регулярные выражения встроенного языка доступны только с 8.3.23). Раньше на платформах младше 8.3.23 формирование скрипта падало с ошибкой «Метод объекта не обнаружен». Логика разбора имени таблицы (базовое имя без суффикса расширения, с сохранением суффикса _VT) сохранена идентичной.
  • Устранено падение скрипта на MS SQL при удалении большого числа корневых объектов: вставка идентификаторов во временную таблицу разбивается на пачки по 1000 строк. Ранее все идентификаторы вставлялись одним конструктором INSERT … VALUES, а MS SQL допускает не более 1000 строк в одном VALUES (ошибка 10738) — в режиме «Удаление неиспользуемых объектов» на больших базах это приводило к невыполнению скрипта.

Обновление устанавливается на любую версию.

Скачать обновления вы можете на нашем сайте предварительно авторизовавшись, используя Ваш логин и пароль, далее зайти в меню "Техподдержка > Личный кабинет" и скачать необходимые обновления.


Изображение автора статьи

Основатель и директор по развитию Софтонит. Практикующий руководитель разработки. Эксперт в области автоматизации техподдержки

Теги
Загрузка...
Поделитесь статьей