наверх
Свободные IT публикации
логин:
пароль:

Свертка БД 1С: обрезка до выбранной даты средствами MS SQL [1139]


[8] AdminITD - 2019-11-15 19:59:05



Вступление


В работе программиста 1С порой возникают нетривиальные задачи. Одна из таких задач - обрезка баз данных, имеющих очень большие физические размеры. Причины возникновения этой задачи самые разнообразные - критическое падение производительности информационной системы, проблемы технического обслуживания БД (проведение регламентных работ, формирование бекапов), создание тестовых баз разработки для подключения к хранилищу и прочее. Как пример - решение проблемы производительности с помощью разделения основной рабочей ИБ на БЕК/ФРОНТ с помощью формирования РИБ, состоящей из отчетной полной базы и небольшой рабочей БД, содержащей только срез данных, необходимый для регистрации текущих хозяйственных операций.

Особенность задачи свертки базы в том, что ее решение типовыми средствами - достаточно сложный и неприемлемо долгий процесс. Поэтому, да простят меня непреклонные приверженцы твердого соблюдения лицензионного соглашения, для свертки данных я использую исключительно средства MS SQL. В представленной разработке собраны основные методы одного из способов быстрой очистки базы данных до выбранной даты.

Обработка предназначена для любых конфигураций на платформе 1С:Предприятие 8.3 (8.3.9.1818 и выше), работающих в режиме управляемого приложения. При желании, не составит труда сконвертировать ее под любую конфигурацию V8.2 и выше. Для использования обработки требуются параметры доступа к SQL с правом создания и изменения таблиц.

Краткое описание возможностей обработки


При подключении к базе SQL сразу предоставляется следующая аналитическая информация:
  • размер БД и наличие свободного пространства;
  • дата последней резервной копии и ее размер;
  • список первых 30 таблиц максимального размера с указанием внутреннего имени, количества строк и размера в МБ;
  • список таблиц, очищенных или обрезанных с помощью данной обработки ранее;

Основные команды обработки:
  • команда "Обновить исходные данные анализа" обновляет параметры выбранной БД и список таблиц максимального размера;
  • команда "Выполнить сжатие БД (shrink)" запускает сжатие БД. Т.к. операция длительная, запрос сжатия выполняется асинхронно;
  • команда "Выполнить анализ выбранных таблиц" определяет размер данных до и после указанной даты среза. Размер в МБ рассчитывается исходя из количества строк и среднего веса 1 строки;
  • команда "Рассчитать время обрезки таблиц" производит расчет ориентировочного времени загрузки среза данных в новые таблицы путем замера длительности тестовой загрузки небольшого пакета данных и пропорционального пересчета согласно предполагаемого размера данных среза. Полученный таким образом параметр не является точным и существенно зависит от текущей нагрузки на сервер, но позволяет примерно оценить требуемое на обрезку таблиц время:
  • команда "Обрезка выбранных таблиц до границы среза" создает копии отмеченных таблиц и заполняет их срезом данных с указанной даты. Срез данных определяется по реквизиту, указанному в списке таблиц в поле "Реквизит среза". Для табличных частей доступен вариант среза "По основной таблице", при этом срез данных ТЧ формируется по набору ссылок, отобранных в основной таблице объекта. В завершение операции, исходные таблицы заменяются соответствующими копиями, переименовываются и остаются в базе в качестве резерва для возможности отката в исходное состояние.
  • команда "Подменить выбранные таблицы пустыми" подобна предыдущей, но новые таблицы подмены остаются пустыми;
  • команда "Полная очистка выбранных таблиц (TRUNCATE)» производит мгновенную полную очистку выбранных таблиц без возможности восстановления данных. Команда опасная, на рабочих БД советую использовать ее очень осторожно;
  • команда "Удалить временные таблицы" удаляет все временные таблицы, созданные при свертке БД ранее и не удаленные автоматически по каким-либо причинам, к примеру из-за технического сбоя.

Запуск всех "опасных" команд производится только после предварительного подтверждения. Для большинства основных команд доступен просмотр текста сформированного скрипта SQL в отдельном окне. Пустые таблицы при анализе/свертке игнорируются.

Команды работы с резервными копиями таблиц расположены на вкладке "Очищенные (обрезанные) таблицы":
  • команда "Восстановить исходные данные таблиц" возвращает исходные таблицы данных переименованием, таблицы подмены удаляются;
  • команда "Удалить резервные таблицы исходных данных" удаляет исходные таблицы данных непосредственно, восстановление исходных данных после этого невозможно.

Обновление от 2019.11.22:
Добавлена команда "Сжать данные таблиц". По команде выбранные таблицы сжимаются средствами MSSQL. Данная операция позволяет существенно сократить размер БД без удаления записей.
Более подробно здесь: https://docs.microsoft.com/ru-RU/sql/relational-databases/data-compression/data-compression?view=sql-server-2016
Обновление от 2019.12.27:
  • Добавлена возможность выбора количества отбираемых таблиц и установки минимального ограничения размера;
  • Добавлена возможность отбора по типу объектов (справочник, документ и т.п.);
  • Добавлена возможность определения среза данных по справочному значению выбранного реквизита: к примеру, когда нужно оставить только данные по выбранным организациям;

Заключение


В завершение, обращаю внимание, что обработка осуществляет грубую обрезку данных без контроля ссылочной целостности. Используйте ее очень аккуратно и внимательно, очистку рабочих баз рекомендую производить в монопольном режиме и при обязательном наличии актуальной резервной копии БД.
Всем удачи!

● Файлы для скачивания:

для получения доступа требуется авторизация размер: 34.3 кб, скачиваний: 176. cодержимое архива: ОчисткаТаблицБД_83.epf - 43 кб.

● Комментарии:

Для добавления комментария необходима авторизация.

[806] RomanS (2021-05-20 14:00:18)


Доброго дня. Вопрос по свертке регистра накопления. При такой подмене таблицы как в вашей обработке корректно ли сохраняется "связь" основной таблицы с таблицами: остатков _AccumRgT (или оборотов _AccumRgTn), настроек хранения итогов _AccumRgOpt, агрегатов _AccumRgAgg, статистики _AccumRgSt?

Все комментарии