Почему база данных 1С стремительно растет в размере и что с этим делать?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Ситуация, когда размер базы данных увеличивается несоразмерно объему вводимой информации, знакома многим администраторам и разработчикам. "Пухнущая" база может привести к снижению производительности и нехватке дискового пространства. Разберем подробно основные причины этого явления и рассмотрим шаги, которые мы можем предпринять для диагностики и решения проблемы.

1. Проанализируем хранение вложенных файлов

Одной из самых распространенных причин резкого роста базы является хранение прикрепленных файлов (сканов документов, изображений товаров, PDF-файлов) непосредственно в информационной базе. По умолчанию платформа часто сохраняет их в двоичных данных внутри таблиц SQL.

Чтобы решить эту проблему, выполним следующие действия:

  1. Проверим настройки работы с файлами в вашей конфигурации (обычно это раздел Администрирование — Настройки работы с файлами).
  2. Настроим хранение файлов в томах на диске. Это позволит вынести "тяжелый" контент из файла базы данных (.mdf) в обычные папки на сервере.
  3. Если файлы уже накоплены в базе, используем стандартные обработки по переносу файлов в тома.

2. Исследуем структуру таблиц SQL

Чтобы понять, что именно занимает место, нам необходимо заглянуть "под капот" СУБД. Если мы используем MS SQL Server, воспользуемся стандартным отчетом: кликнем правой кнопкой мыши по базе данных, выберем Reports — Standard Reports — Disk Usage by Top Tables.

Проанализируем результаты:

Для сопоставления непонятных имен SQL-таблиц (например, _InfoReg12345) с понятными именами 1С (например, РегистрСведений.КурсыВалют), воспользуемся встроенным языком 1С. Для этого применим метод ПолучитьСтруктуруХраненияБазыДанных. Чтобы упростить эту задачу, можно использовать готовую обработку, которая наглядно представляет структуру хранения базы данных.

Пример кода для получения информации о соответствии таблиц:


ИменаТаблиц = Новый Массив;
ИменаТаблиц.Добавить("Справочник.Номенклатура");
// Можно передать пустой массив для получения всех таблиц
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных(ИменаТаблиц, Истина);

3. Проверим механизм версионирования объектов

Часто мы забываем о механизме "История данных" (версионирование). Если он включен бездумно для всех объектов, то каждое сохранение справочника или документа создает его копию в регистре сведений (обычно в формате XML или FastInfoSet).

Давайте выполним следующие шаги:

  1. Проверим настройки версионирования. Часто пользователи включают его "на всякий случай".
  2. Убедимся, что настроено Регламентное задание по очистке устаревших версий (например, удалять версии старше 6 месяцев).
  3. Если регистр версионирования уже разросся, запустим очистку вручную через соответствующие обработки администрирования.

4. Изучим планы обмена и регистрацию изменений

Если в базе настроена синхронизация (РИБ или обмен с другими системами), таблицы регистрации изменений могут стать причиной роста. Рассмотрим ситуацию, когда узел обмена неактивен, но не помечен на удаление, или обмен постоянно завершается с ошибкой.

В этом случае система продолжает регистрировать изменения всех данных для этого узла, но никогда их не "сбрасывает". Таблицы изменений (в SQL они часто имеют суффикс _ChangeR) растут бесконечно.

Что нужно сделать:

5. Разберем технические таблицы и последствия динамических обновлений

Иногда место занимают служебные таблицы конфигурации, такие как Config, ConfigSave или Params. Это часто случается при активном использовании динамического обновления ("демонического" обновления).

В таблицах могут оставаться "мусорные" данные старых версий конфигурации. Попробуем решить это стандартными методами:

  1. Проведем "Тестирование и исправление" в Конфигураторе с опцией Сжатие таблиц информационной базы.
  2. В крайнем случае (если база не огромная), может помочь выгрузка в .dt и обратная загрузка, что пересобирает структуру таблиц, но для больших SQL-баз этот метод следует применять с осторожностью.

6. Проанализируем настройки MS SQL Server

Не всегда виновата сама 1С, иногда дело в настройках СУБД. Обратим внимание на Модель восстановления (Recovery Model).

Также не забудем про фрагментацию индексов. Сильно фрагментированные данные занимают больше места ("воздух" в файле БД). Настроим регулярные операции Rebuild или Reorganize индексов на стороне SQL Server. Для этого существует подробная инструкция по настройке регламентных операций MS SQL Server, а для более тонкой работы можно использовать доработанные решения, например, MaintenanceSolution от Ola Hallengren.

7. Рассмотрим другие возможные причины

Если вышеперечисленные методы не помогли, обратим внимание на более редкие случаи:

Последовательно применяя эти методы, мы сможем выявить причину аномального роста базы и вернуть её размер в нормальное состояние.

← На главную