Жила была небольшая сетка РИБ. С узлами на файловых базах. И пришла беда откуда ждали, размеры баз на узлах потихоньку росли и росли, и кое где выросли до неприличных размеров.
Возникла задача, как-то уменьшить размеры баз на узлах.
План работ:
- Собрать данные с периферии и написать отчет:
- Размер баз.
- Характеристики «сервера».
- Посмотреть какие данные не особо нужны на периферии.
- Подготовить регламент в 1С удаляющий не особо нужные данные.
- Подготовить скрипт, для планировщика Windows, для сжатия базы.
- Проанализировать результаты работы п. 1-4.
Реализация:
Создаю регламент фиксирующий данные на периферийном «сервере».
Собираю интересующую меня информацию:
СистИнфо = Новый СистемнаяИнформация; ДанныеПК = Новый Структура; ДанныеПК.Вставить("ИмяПК", ИмяКомпьютера()); ДанныеПК.Вставить("ТипПлатформы", Строка(СистИнфо.ТипПлатформы)); ДанныеПК.Вставить("ВерсияОС", СистИнфо.ВерсияОС); ДанныеПК.Вставить("ВерсияПриложения", СистИнфо.ВерсияПриложения); ДанныеПК.Вставить("Процессор", СистИнфо.Процессор); ДанныеПК.Вставить("ОперативнаяПамять", СистИнфо.ОперативнаяПамять); ДанныеПК.Вставить("РазмерБазы", РазмерФайловойБазы()); ДанныеОДисках = ПолучитьИнформациюОДисках(); Для каждого ЭлементДанных Из ДанныеОДисках Цикл ДанныеПК.Вставить("Диск_" + ЭлементДанных.Буква, ЭлементДанных.Характеристики); КонецЦикла;
Пишу полученную структуру в json отправляю в центральный узел.
Создаю отчет отражающий полученные данные:
Смотрю какие таблицы не очень-то и нужны на периферии
Для этого поднимаю копию периферийной базы на SQL-сервере и внимательно разглядываю таблицы, начиная с самых крупных по размеру. Решаю какие из этих данных возможно удалить. Для это работы использовал: «Инструменты разработчика».
Вердикт:
- Несколько регистров сведений очистить полностью
- Несколько регистров сведений чистить, оставляя последний месяц
- Несколько справочников очистить полностью
- Один тип документов очистить полностью
Подготавливаю регламент по удалению данных.
Не забывая очищать регистрацию изменений, т.к. в центральной базе эти данные нужны.
Т.к. любая запись занимает какое-то время, что бы не мешать пользователям данные удаляю ночью пачками по N-записей.
Пишу для удаления что-то типа такого:
// РС полная очистка ИмяТаблицы = "Регистр1"; ОчиститьРегистрСведенийПолностью(ИмяТаблицы); // РС частичная очистка КоличествоЭлементов = "80000"; ИмяТаблицы = "Регистр2"; ОчиститьРегистрСведенийЧастично(ИмяТаблицы, КоличествоЭлементов); // РН частичная очистка ИмяТаблицы = "Регистр3"; ОчиститьРегистрСведенийЧастично(ИмяТаблицы, КоличествоЭлементов); // Справочники частичная очистка ИмяСправочника = "Справочник1"; ОчиститьСправочникЧастично(ИмяСправочника, КоличествоЭлементов); // Документы полная очистка ИмяДокумента = "Документ1"; ОчиститьДокументЧастично(ИмяДокумента, КоличествоЭлементов);
Пишу скрип, для планировщика Windows.
В скрипте запускаю конфигуратор со ключами на сжатие базы данных:
%platform% CONFIG /F %base% /N %login% /P %pass% /Out %file_log_compression% /DumpResult %file_result_compression% /DisableStartupMessages /DisableStartupDialogs /IBCheckAndRepair -IBCompression
Тут же немного корректирую п. 1. добавляя туда чтение файла результата сжатия:
РезультатСжатия = РезультатСжатиеБазы(); ДанныеПК.Вставить("Сжатие", РезультатСжатия);
Смотрю отчет и вижу что базы потихоньку уменьшаются.
Так же заметил, что от некоторых баз «РезультатСжатия» вернулся отрицательным. Оказалось, что базы были немного побиты, и после лечения тоже стали уменьшатся.
Ну, как видно базы немного похудели.
В вложении отчет как на картинке. Так же в модуль отчета добавлены функции и процедуры по формированию данных для отчета и по удалению данных.
Разрабатывалось на релизе платформы 8.3.18.1433