Постановка задачи
Попалась на решение следующая задача: после перехода на 1С:Документооборот 3.0 база начала "пухнуть" - прирост идет +1 гб за один рабочий день. Платформа: 8.3.20.2180.
Подход к решению
Начинаем с анализа размера таблиц в СУБД. В топ вырвалась _SystemSettings, как по размеру, так и по динамике роста.
Причины роста
Подход к решению описан в теме на форме - вот ссылка. Причина роста таблицы - сохранение миллионов настроек из-за ошибок настройки формы или ошибок в коде.
1. Ошибка настроек. У формы есть два булевских свойства:
АвтоНавигационнаяСсылка
- при каждом открытии генерирует новую навигационную ссылку
АвтоматическоеСохранениеДанныхВНастройках
- при закрытии сохраняет настройки формы в хранилище системных настроек
Если включить оба этих свойства, то при каждом вызове будет генерироваться новая навигационная ссылка, а при закрытии - по этой навигационной ссылке будут сохраняться настройки. Это приведёт к сохранению в базу данных миллионов записей вида: ...0978abfb_8f52_4070_aa7e_849dbe44c184/НастройкиОкна
, которые никогда не будут считаны. (спасибо AllexSoft за подробный анализ проблемы).
2. Ошибки в коде - когда программный код является источником генерации подобного количества новых записей.
Порядок решения
Решение проблемы состоит из 3-х частей:
- Найти проблемные формы
- Исправить настройки или код
- Очистить "мёртвый груз" и провести регламенты на СУБД
Для анализа и исправления уже сделано много наработок коллегами:AllexSoft, TigerPXN и klinval. Я взял наработки коллег и объединил в одну обработку для повышения удобства использования. В конце статьи приведена ссылка на гитхаб, где лежат исходники. Кратко расскажу, как ей пользоваться созданной обработкой "Работа с системными настройками".
"Анализ" - помогает найти проблемные настройки
- читает настройки из базы (если выбран пользователь - будет установлен доп. отбор по пользователю);
- выводит настройки на вкладку "Результаты анализа"; максимальное кол-во выводимых записей задаётся реквизитом "Обработать записей (max.)"
- Подсчитывает количество записей, подходящие под указанные в таблице "Шаблоны поиска и удаления записей" шаблоны
- Таблица предзаполнена шаблонами по ранее встречавшимся кейсам.
Подменю "Очистка настроек"
- "Удалить с учетом шаблонов" - удаляет записи, которые подходят к одному из шаблонов, для которого в колонке "Удалить" в таблице "Шаблоны поиска и удаления записей" стоит признак "Истина". Количество удаляемых записей ограничено размером порции, указанной в настройке "Порции для удаления".
- "Очистить историю работы пользователей" - очищает таблицу
ИсторияРаботыПользователя.ОчиститьВсе()
. - "Очистить настройки несуществующих пользователей" - удаляет настройки пользователей, которые помечены на удаление или которых нет в справочнике "Пользователи"
- "Удалить все настройки (без применения шаблонов)" - просто удаляет все настройки. Ограничено размером порции, указанной в настройке "Порции для удаления".
Благодарности, ссылки и использованные источники
Основной источник информации - тема на форуме: Как сократить размер таблицы _SYSTEMSETTINGS и почему она растет?.
"Мы – только лишь карлики, стоящие на плечах гигантов". Отдельная благодарность камрадам: AllexSoft, TigerPXN и klinval за то, что поделились своими наработками.
Исходники разрабатываемой обработки лежат тут.
Заключение
Коллегам из компании Омега спасибо, что разрешили поделиться материалом. Написать данную статью решился исходя из двух соображений:
1. Статьи про описание данной проблемы и способы её решения нет, а собирать информацию пробегаясь по форуму - не всегда хочется.
2. В теме на форуме обработки разделены и не были собраны в единый инструмент. А раз уж я всё это объединил - грех не поделиться.
Спасибо за прочтение. С уважением, Вдовенко Сергей.