В процессе эксплуатации баз данных 1С:Предприятие, особенно в файловом варианте, администраторы часто сталкиваются с неконтролируемым ростом размера файла .1CD. Одной из неочевидных причин этого роста является разрастание технической таблицы systemsettings. Когда эта таблица достигает размеров в несколько гигабайт, это не только занимает дисковое пространство, но и существенно замедляет запуск программы, открытие форм и работу пользователей. Рассмотрим подробно, что это за таблица и какими методами можно привести её объем в норму.
Прежде чем приступать к очистке, давайте разберем, что именно хранит эта таблица. В systemsettings (Хранилище системных настроек) платформа записывает персональные предпочтения пользователей, которые не относятся к данным учета, но важны для комфортной работы. К ним относятся:
Проблема заключается в том, что в некоторых релизах платформы или из-за особенностей кода конфигурации (например, при частом программном изменении настроек формы) эти данные начинают дублироваться или не удаляются при неактуальности, что и приводит к лавинообразному росту таблицы.
Если ваша конфигурация построена на базе «Библиотеки стандартных подсистем» (а это почти все современные решения: «Розница 2.3/3.0», «Бухгалтерия предприятия 3.0», «Управление торговлей 11» и др.), в ней уже заложен механизм управления этими данными. Давайте разберем по шагам, как им воспользоваться.
Перейдем в раздел Администрирование — Обслуживание. В открывшемся окне найдем гиперссылку Управление настройками пользователей. Здесь нам доступны два основных инструмента:
Важно: Очистка настроек форм заставит пользователей заново настраивать ширину колонок и видимость полей, поэтому такие операции лучше проводить в периоды минимальной активности или после согласования.
Бывают ситуации, когда штатная обработка не справляется из-за слишком большого объема данных (просто зависает). В этом случае мы можем написать небольшой скрипт для точечной очистки. Для работы с этой таблицей используется объект ХранилищеСистемныхНастроек. Рассмотрим пример кода, который позволяет перебрать и удалить настройки по определенному ключу или пользователю.
Проанализируем ситуацию: чаще всего «раздуваются» настройки динамических списков. Попробуем найти и удалить их программно:
Выборка = ХранилищеСистемныхНастроек.Выбрать();
Пока Выборка.Следующий() Цикл
// Проверяем ключ объекта или пользователя
// Например, удалим настройки для конкретного пользователя "Иванов"
Если Выборка.Пользователь = "Иванов" Тогда
ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, Выборка.КлючНастроек, Выборка.Пользователь);
Сообщить("Удалена настройка: " + Выборка.КлючОбъекта);
КонецЕсли;
КонецЦикла;
Также мы можем использовать метод ХранилищеСистемныхНастроек.Удалить() с пустыми параметрами для массовой очистки, но будьте осторожны: это удалит абсолютно все настройки всех пользователей, включая сохраненные варианты отчетов и настройки принтеров. Для выборочного управления записями без написания скриптов можно использовать обработку для редактирования настроек пользователей.
Для глубокого анализа содержимого systemsettings мы рекомендуем использовать сторонние инструменты, такие как «Инструментарий разработчика» (автор tormozit). Эти обработки позволяют наглядно увидеть, какая именно запись в таблице занимает больше всего места. Выясним причину: часто это бывает одна-единственная настройка огромного списка, которая из-за ошибки в коде сохранилась в виде гигантского XML-блока.
Найдя такую запись, вы сможете удалить только её, не затрагивая полезные настройки пользователей.
Критически важный момент: Простое удаление записей из systemsettings (хоть программно, хоть через интерфейс) не уменьшит размер файла базы данных на диске. В СУБД 1С (файл .1CD) при удалении записей место просто помечается как свободное для будущих записей, но физически файл не сжимается.
Рассмотрим алгоритм действий для реального уменьшения объема базы:
Только после завершения этой процедуры вы увидите, что размер файла базы данных на диске уменьшился. В некоторых случаях после удаления 3 ГБ данных из systemsettings база реально уменьшается на те же 3 ГБ.
В среде SQL-администраторов часто звучит совет использовать команду TRUNCATE TABLE. Разберем, почему для 1С это плохая идея:
.1CD.Подводя итог, скажем: регулярный мониторинг размера системных таблиц и использование штатных средств очистки БСП вместе с периодическим сжатием таблиц — это лучший способ поддерживать производительность файловой базы 1С на высоком уровне. Для наглядного контроля занимаемого таблицами места подойдёт инструмент для анализа объёмов таблиц базы 1С.