Как очистить базу 1С от лишних данных в Хранилище системных настроек и адресном классификаторе?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При длительной эксплуатации информационных баз 1С (в частности, 1С:Управление торговлей 11 или 1С:ERP) системные администраторы и программисты часто сталкиваются с неконтролируемым ростом размера базы данных. Анализ распределения таблиц нередко выявляет, что значительную часть дискового пространства занимают системная таблица ХранилищеСистемныхНастроек и таблицы адресного классификатора. Разберем по шагам, почему эти области разрастаются, чем чревата их полная или частичная очистка, а также рассмотрим практические способы безопасного сжатия базы данных.

Почему разрастается Хранилище системных настроек

Проанализируем ситуацию: системное хранилище настроек (в СУБД это таблица _SystemSettings) предназначено для сохранения пользовательских параметров интерфейса. Однако очень часто у нескольких активных пользователей накапливаются тысячи однотипных записей с ключами вида Отчет.ПоступлениеИОтгрузкаТоваров/ПоступлениеИОтгрузкаТовара<GUID>/КлючТекущегоВарианта.

Выясним причину такого поведения. Это связано с работой механизма расшифровки отчетов на системе компоновки данных (СКД):

  1. Когда пользователь открывает отчет или карточку номенклатуры и нажимает Расшифровать другим отчетом, платформа и библиотека стандартных подсистем (БСП) изолируют состояние нового отчета.
  2. Для формирования отдельного контекста расшифровки динамически генерируется уникальный идентификатор (GUID) варианта отчета или формы.
  3. Платформа штатно сохраняет параметры формы, пользовательские отборы и ключ текущего варианта для этого временного GUID в системное хранилище.
  4. Каждая повторная расшифровка создает новый уникальный идентификатор, при этом старые записи никогда больше не считываются и остаются мертвым грузом в виде BLOB-данных. При активной работе менеджеров за несколько месяцев накапливаются сотни тысяч записей, занимающих гигабайты объема.

Чем опасна очистка Хранилища системных настроек

Разберем, что произойдет с базой данных, если полностью или выборочно очистить системные настройки. Важно заранее оценить последствия для пользователей:

  1. Учетные данные не пострадают: документы, справочники, движения регистров, а также сами учетные записи пользователей информационной базы остаются неизменными.
  2. Пользовательские варианты отчетов не удалятся: если варианты были сохранены через типовой интерфейс БСП, они хранятся в специальном справочнике вариантов отчетов, а не в системном хранилище платформы.
  3. Сбросятся персональные настройки интерфейса: пользователь потеряет настроенную ширину колонок, порядок полей и видимость элементов в динамических списках документов и справочников. Формы вернутся к первоначальному типовому виду.
  4. Сбросятся размеры окон: экранные координаты, сохраненные размеры и положение окон вернутся к значениям по умолчанию.
  5. Очистится история автоподбора: сбросятся подсказки быстрого выбора в полях ввода, а также значения по умолчанию, которые форма запоминала при создании новых документов.

Поэтому полная очистка настроек для всех работающих пользователей вызовет волну недовольства, так как каждому придется заново кастомизировать свои рабочие журналы и списки под удобный вид.

Точечная программная очистка системных настроек

Вместо полного удаления системных настроек целесообразно выполнить выборочную очистку. Удалим мусорные записи, оставленные уволенными сотрудниками, а также временные ключи расшифровок отчетов с GUID, не затрагивая настройки списков и форм документов.

Рассмотрим пример кода внешней обработки, с помощью которой можно выполнить безопасную точечную очистку через объект ХранилищеСистемныхНастроек:


ВыборкаНастроек = ХранилищеСистемныхНастроек.Выбрать();

Пока ВыборкаНастроек.Следующий() Цикл
    КлючОбъекта = ВыборкаНастроек.КлючОбъекта;
    ИмяПользователя = ВыборкаНастроек.Пользователь;
    
    // Проверяем, относится ли запись к мусорным расшифровкам отчета с GUID
    Если СтрНайти(КлючОбъекта, "ПоступлениеИОтгрузкаТоваров") > 0 И СтрДлина(КлючОбъекта) > 60 Тогда
        ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, ВыборкаНастроек.КлючНастроек, ИмяПользователя);
    КонецЕсли;
КонецЦикла;

Также в конфигурациях на базе БСП можно воспользоваться типовым инструментом: перейдем в раздел Администрирование — Настройки пользователей и прав — Очистка настроек. В данном интерфейсе можно выбрать конкретного пользователя или указать проблемный отчет для удаления его параметров.

Очистка и оптимизация адресного классификатора

Второй частый источник раздувания базы — адресные сведения, которые могут занимать несколько гигабайт. Разберем правила работы с ними:

  1. Сохранность контактной информации: адреса в карточках контрагентов, партнеров и физических лиц хранятся в их табличных частях в виде форматированных строк (JSON/XML). Удаление записей классификатора не повредит уже введенные адреса в документах и справочниках.
  2. Использование онлайн-сервиса: наиболее эффективный способ сэкономить место — полностью отключить локальное хранение адресных сведений. Перейдем в Администрирование — Интернет-поддержка и сервисы — Адресный классификатор и переключим загрузку на веб-сервис 1С. В таком режиме классификатор не хранится в информационной базе, а подбор улиц и домов происходит через интернет.
  3. Штатное удаление неиспользуемых регионов: если доступ в интернет на сервере ограничен, воспользуемся штатной кнопкой Очистить адресные сведения в том же окне настроек. Оставим загруженными только те регионы, с которыми предприятие ведет торговую деятельность, и очистим историю изменений адресных объектов.

Физическое сжатие базы данных после удаления

Важно помнить: простое удаление записей программным кодом или через интерфейс не уменьшает физический размер файла базы данных на диске. Платформа и СУБД лишь помечают освободившиеся страницы как доступные для повторной записи.

Чтобы физически уменьшить размер базы, выполним следующие шаги:

  1. Для файловой базы: обязательно создадим резервную копию. Затем запустим конфигуратор, откроем меню Администрирование — Тестирование и исправление..., установим флажок Сжатие таблиц информационной базы и нажмем Выполнить.
  2. Для клиент-серверной базы (MS SQL / PostgreSQL): выполним обслуживание базы средствами СУБД. На стороне сервера потребуется выполнить сжатие файлов базы (операция Shrink в MS SQL Server или VACUUM FULL в PostgreSQL), после чего обязательно проведем реиндексацию таблиц для устранения фрагментации индексов.
← На главную