Как уменьшить размер базы 1С и что произойдет при разворачивании DT на диске с нехваткой места?

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

Нередко перед администраторами и разработчиками 1С встает задача получить компактную или тестовую копию крупной рабочей базы (например, объемом 70 Гб), чтобы уложить ее в ограничения бесплатной редакции СУБД (MS SQL Server Express с лимитом 10 Гб) либо развернуть на рабочей станции с ограниченным дисковым пространством. Рассмотрим, что происходит при попытке загрузить стандартную выгрузку базы (файл .dt) на накопитель недостаточного объема, и разберем проверенные способы реального уменьшения объема данных информационной базы.

Что произойдет при прерывании загрузки DT-файла из-за нехватки места

Иногда возникает идея искусственно ограничить свободное место на диске и запустить стандартную операцию «Загрузить информационную базу» из файла .dt в надежде получить частично заполненную, но работающую систему. Разберем, как устроен процесс загрузки и к какому результату это приведет на практике:

  1. Нарушение транзакционной целостности в СУБД: процесс загрузки базы данных производит последовательное создание структуры таблиц и пакетную вставку данных. При возникновении ошибки переполнения диска сервер СУБД аварийно прерывает операцию и откатывает текущую транзакцию. База переходит в аварийное состояние с незавершенной структурой метаданных, частично загруженными таблицами и разрушенной ссылочной целостностью.
  2. Повреждение заголовков файла базы: если разворачивание выполняется в файловом варианте (.1cd), резкая остановка записи из-за отсутствия места на диске разрушает внутреннюю структуру каталога страниц файла базы данных. Встроенные механизмы платформы или утилита chdbfl.exe не смогут исправить такую базу, так как ключевые системные таблицы окажутся недописанными.

Вывод: получить работоспособную «урезанную» базу аварийным прерыванием распаковки невозможно. База данных гарантированно будет повреждена и не откроется в пользовательском режиме или в режиме Конфигуратора.

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

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

  1. Файловый режим (формат .1cd): имеет внутреннее жесткое ограничение — размер любой отдельной физической таблицы (включая индексы и поля неограниченной длины ХранилищеЗначения) не может превышать 4 Гб. Если в рабочей базе объемом 70 Гб хотя бы одна таблица (например, регистр накопления или таблица присоединенных файлов) превышает 4 Гб, файл .dt в файловую базу не загрузится вовсе.
  2. MS SQL Server Express: ограничение в 10 Гб применяется исключительно к файлам данных (.mdf и .ndf). Файл журнала транзакций (.ldf) в данный лимит не входит, однако сама база данных перестает принимать новые транзакции, как только суммарный объем данных достигает предела.

Поиск самых «тяжелых» таблиц в базе данных

Чтобы понять, за счет чего можно уменьшить объем информационной базы, проанализируем распределение занятого пространства между физическими таблицами СУБД. В MS SQL Server для этого используется стандартный отчет Disk Usage by Top Tables. Однако имена таблиц в СУБД представлены во внутреннем формате (например, _InfoRg1234, _Document567). Чтобы сопоставить их с реальными объектами конфигурации 1С, используем встроенную функцию платформы ПолучитьСтруктуруХраненияБазыДанных().

Посмотрим на пример программного сопоставления имен таблиц СУБД и объектов метаданных:


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

Для Каждого ОписаниеТаблицы Из ТаблицыХранения Цикл
    // Имя физической таблицы в MS SQL Server
    ИмяТаблицыSQL = ОписаниеТаблицы.ИмяТаблицыХранения;
    
    // Соответствующее имя объекта метаданных конфигурации 1С
    ИмяМетаданных = ОписаниеТаблицы.Имя;
    Назначение    = ОписаниеТаблицы.Назначение;
    
    // Выводим информацию для сопоставления с отчетом СУБД
    Сообщить("Таблица SQL: " + ИмяТаблицыSQL + " -> Объект 1С: " + ИмяМетаданных + " (" + Назначение + ")");
КонецЦикла;

Сопоставив отчет из Management Studio со списком объектов 1С, мы точно определим прикладные сущности, занимающие львиную долю дискового пространства.

Скрытые источники избыточного объема и способы их устранения

Часто гигантский размер базы 1С связан не с финансовыми записями, а со служебными данными. Проанализируем основные статьи нерационального расхода места:

  1. Присоединенные файлы и сканы: хранение файлов внутри базы данных в реквизитах типа ХранилищеЗначения раздувает размер базы в разы. Штатная настройка хранения файлов на внешних томах (в сетевых папках) позволяет выгрузить двоичные данные на диск за пределы базы данных, освободив десятки гигабайт.
  2. Версионирование объектов: регистры версий объектов при длительной эксплуатации системы могут занимать от 30% до 60% всего объема. Удаление устаревших версий объектов с помощью регламентного задания или специальной обработки очистки истории версий существенно уменьшает размер базы.
  3. Мусор динамических обновлений: частое применение механизма обновления конфигурации базы данных «на лету» приводит к разрастанию таблиц Config и ConfigSave. Для очистки сохраним рабочую конфигурацию в файл .cf через меню «Конфигурация» — «Сохранить конфигурацию в файл», после чего выполним операцию «Конфигурация» — «Загрузить конфигурацию из файла». Это полностью перезаписывает служебные таблицы и удаляет накопленный мусор.
  4. Индексы полнотекстового поиска: если функционал полнотекстового поиска не востребован пользователями, можно очистить индекс ППД и отключить его регламентное обновление.

Методы получения компактной базы данных

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

  1. Свертка базы данных: проведение свертки позволяет сформировать входящие остатки на выбранную дату (например, на начало текущего года) и физически удалить исторические документы и движения прошлых лет с контролем ссылочной целостности через удаление помеченных объектов.
  2. Формирование начального образа узла РИБ с отбором: наиболее надежный способ создания компактной копии без ручной чистки. Создадим план обмена с фильтрацией (например, ограничение по конкретной организации или по периоду). Формирование начального образа узла РИБ штатными средствами платформы выгружает только необходимые данные вместе с конфигурацией, сохраняя целостность всех связей. После создания образ можно отвязать от главного узла вызовом метода ПланыОбмена.УстановитьГлавныйУзел(Неопределено).
  3. Перенос справочников и остатков через универсальный обмен XML: развернем пустую информационную базу из файла конфигурации .cf и перенесем в нее с помощью типовой обработки «Универсальный обмен данными в формате XML» только нормативно-справочную информацию (справочники) и актуальные остатки по регистрам. В результате получим рабочую копию базы минимального объема.
  4. Сжатие таблиц на уровне СУБД (PAGE/ROW Compression): если в MS SQL Server доступна функция сжатия данных, применение постраничного сжатия (PAGE) к самым крупным таблицам и их индексам способно уменьшить физический объем базы в 2–3 раза без удаления записей.
← На главную