Как узнать размер таблиц в файловой базе данных 1С?

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

В процессе администрирования и оптимизации файловых баз 1С (файл 1Cv8.1CD) нередко возникает потребность узнать точный размер конкретных таблиц. Это критически важно при приближении к техническим лимитам файлового формата или при внезапном разрастании базы данных. Разберем, как устроена файловая база изнутри, какими штатными и сторонними средствами можно проанализировать размер каждой таблицы, и как устранить разрастание данных.

Особенности структуры таблиц в файле 1Cv8.1CD

Прежде чем приступать к анализу, выясним внутреннее устройство файловой базы. Каждая таблица метаданных в файле 1Cv8.1CD физически делится платформой на три самостоятельных потока (блока данных):

  1. Таблица записей фиксированной длины: содержит основные поля стандартных типов фиксированного размера (числа, даты, булево, ссылки).
  2. Таблица индексов: содержит индексы для быстрого поиска и сортировки по полям таблицы.
  3. Таблица данных переменной длины (LOB/BLOB): содержит длинные строки неограниченной длины, бинарные данные, файлы и значения полей типа ХранилищеЗначения.

В классическом формате файловой базы со страницей 4 КБ ограничение в 4 ГБ действует не на весь файл целиком, а отдельно на каждый из этих трех потоков для каждой таблицы. Начиная с платформы 8.3.8 поддерживается расширенный формат со страницами от 8 до 64 КБ, однако контроль объема отдельных таблиц остается важной задачей мониторинга.

Способ 1. Использование встроенного метода платформы 1С

Начиная с версии платформы 8.3.15, доступен встроенный метод глобального контекста ПолучитьРазмерДанныхБазыДанных(). Он позволяет программно получить объем данных по объектам конфигурации без применения сторонних утилит.

Посмотрим на пример кода для оценки размеров прикладных объектов:


ПараметрыАнализа = Новый Массив;
Для Каждого ДокументМетаданных Из Метаданные.Документы Цикл
    ПараметрыАнализа.Добавить(ДокументМетаданных);
КонецЦикла;

Результат = ПолучитьРазмерДанныхБазыДанных(ПараметрыАнализа);
Для Каждого Стр Из Результат Цикл
    Сообщить("Объект: " + Стр.Объект + " | Размер: " + Окр(Стр.Размер / (1024 * 1024), 2) + " МБ");
КонецЦикла;

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

Способ 2. Использование специализированных утилит анализа

Для детального анализа физического распределения страниц в файле 1Cv8.1CD рассмотрим проверенные инструменты разработчиков:

  1. Утилита Tool_1CD: низкоуровневая программа для прямого чтения бинарной структуры файла базы данных. Позволяет открыть файл 1Cv8.1CD без запуска платформы 1С и увидеть полный список физических таблиц, количество записей и распределение страниц между полями, индексами и BLOB-блоками.
  2. Обработка V8TableSizes: специализированная внешняя обработка для 1С, предназначенная для подсчета и вывода отчетов по размерам таблиц с детальным распределением по типам метаданных.
  3. Подсистема «Инструменты разработчика» (инструмент «Структура хранения БД»): мощный инструмент анализа, который сопоставляет имена объектов метаданных (документы, справочники, регистры) с реальными физическими именами таблиц СУБД и выводит подробную статистику по объемам.

Способ 3. Перенос в клиент-серверный вариант (MS SQL Server)

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

  1. Выгрузим файловую базу в файл выгрузки с расширением .dt через режим Конфигуратора (меню Администрирование > Выгрузить информационную базу).
  2. Создадим тестовую клиент-серверную базу на MS SQL Server и загрузим в нее выгруженный .dt.
  3. Выполним стандартную системную процедуру анализа места sp_spaceused или откроем стандартный отчет Disk Usage by Top Tables в среде SQL Server Management Studio (SSMS).

Такой способ позволяет детально увидеть объем данных (data), объем индексов (index_size) и неиспользуемое зарезервированное пространство (unused) для каждой таблицы.

Причины ложного переполнения и сжатие таблиц

Проанализируем частую проблему: почему размер файла базы данных не уменьшается даже после удаления большого количества записей? При удалении или изменении данных в 1С (особенно в полях неограниченной длины) освобожденные страницы файла не возвращаются операционной системе, а помечаются как свободные внутри структуры базы для последующей записи новых данных. Это приводит к сильной фрагментации.

Для физического освобождения места и пересборки структуры таблиц выполним следующие шаги:

  1. Запустим базу в режиме Конфигуратор в монопольном режиме.
  2. Перейдем в меню Администрирование > Тестирование и исправление...
  3. Установим флаг напротив пункта Сжатие таблиц информационной базы и запустим процесс.
  4. Альтернативный вариант: выполнить полную выгрузку информационной базы в .dt, создать новую чистую файловую базу и загрузить файл обратно. При загрузке файл 1Cv8.1CD формируется заново без фрагментации.
← На главную