При длительной эксплуатации информационных баз 1С (в частности, 1С:Управление торговлей 11 или 1С:ERP) системные администраторы и программисты часто сталкиваются с неконтролируемым ростом размера базы данных. Анализ распределения таблиц нередко выявляет, что значительную часть дискового пространства занимают системная таблица ХранилищеСистемныхНастроек и таблицы адресного классификатора. Разберем по шагам, почему эти области разрастаются, чем чревата их полная или частичная очистка, а также рассмотрим практические способы безопасного сжатия базы данных.
Проанализируем ситуацию: системное хранилище настроек (в СУБД это таблица _SystemSettings) предназначено для сохранения пользовательских параметров интерфейса. Однако очень часто у нескольких активных пользователей накапливаются тысячи однотипных записей с ключами вида Отчет.ПоступлениеИОтгрузкаТоваров/ПоступлениеИОтгрузкаТовара<GUID>/КлючТекущегоВарианта.
Выясним причину такого поведения. Это связано с работой механизма расшифровки отчетов на системе компоновки данных (СКД):
Разберем, что произойдет с базой данных, если полностью или выборочно очистить системные настройки. Важно заранее оценить последствия для пользователей:
Поэтому полная очистка настроек для всех работающих пользователей вызовет волну недовольства, так как каждому придется заново кастомизировать свои рабочие журналы и списки под удобный вид.
Вместо полного удаления системных настроек целесообразно выполнить выборочную очистку. Удалим мусорные записи, оставленные уволенными сотрудниками, а также временные ключи расшифровок отчетов с GUID, не затрагивая настройки списков и форм документов.
Рассмотрим пример кода внешней обработки, с помощью которой можно выполнить безопасную точечную очистку через объект ХранилищеСистемныхНастроек:
ВыборкаНастроек = ХранилищеСистемныхНастроек.Выбрать();
Пока ВыборкаНастроек.Следующий() Цикл
КлючОбъекта = ВыборкаНастроек.КлючОбъекта;
ИмяПользователя = ВыборкаНастроек.Пользователь;
// Проверяем, относится ли запись к мусорным расшифровкам отчета с GUID
Если СтрНайти(КлючОбъекта, "ПоступлениеИОтгрузкаТоваров") > 0 И СтрДлина(КлючОбъекта) > 60 Тогда
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, ВыборкаНастроек.КлючНастроек, ИмяПользователя);
КонецЕсли;
КонецЦикла;
Также в конфигурациях на базе БСП можно воспользоваться типовым инструментом: перейдем в раздел Администрирование — Настройки пользователей и прав — Очистка настроек. В данном интерфейсе можно выбрать конкретного пользователя или указать проблемный отчет для удаления его параметров.
Второй частый источник раздувания базы — адресные сведения, которые могут занимать несколько гигабайт. Разберем правила работы с ними:
Важно помнить: простое удаление записей программным кодом или через интерфейс не уменьшает физический размер файла базы данных на диске. Платформа и СУБД лишь помечают освободившиеся страницы как доступные для повторной записи.
Чтобы физически уменьшить размер базы, выполним следующие шаги:
Shrink в MS SQL Server или VACUUM FULL в PostgreSQL), после чего обязательно проведем реиндексацию таблиц для устранения фрагментации индексов.