Свертка БД 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?
|
|