К статье
Практический материал

Администрирование · 12 мин

Как узнать размер таблиц базы 1С

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

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

Способ определения размера зависит от того, как развёрнута база. Для клиент-серверного варианта (MS SQL Server, PostgreSQL) самый точный результат дают запросы к системным представлениям СУБД. Для файлового варианта прямых инструментов нет, но есть обходные пути через внешние обработки и анализ структуры файла 1Cv8.1CD.

Важно понимать: имена таблиц на уровне СУБД не совпадают с именами объектов метаданных. Документ «Реализация товаров и услуг» в SQL-базе может называться, например, _Document123. Поэтому перед анализом размеров полезно получить соответствие имён — об этом тоже расскажем ниже.

Почему размер таблиц важно контролировать

Рост отдельных таблиц напрямую влияет на скорость работы: запросы к раздутым регистрам выполняются медленнее, реструктуризация при обновлении конфигурации занимает часы, а регламентные операции СУБД (реиндексация, обновление статистики) перестают укладываться в ночное окно.

Типичные «тяжёлые» объекты в базах 1С: регистр сведений «Версии объектов» (если включено версионирование), таблицы хранения двоичных данных файлов, регистры изменений для обменов, таблица журнала регистрации в старых форматах, а также регистры расчёта и бухгалтерии с большим количеством движений за много лет.

Регулярный контроль размеров позволяет вовремя заметить аномалию: например, регистр, который вырос в десять раз за месяц из-за ошибочной настройки обмена или фонового задания, выполняющего лишние записи.

Как сопоставить таблицы СУБД с объектами метаданных

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

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

1c
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из СтруктураХранения Цикл
    Сообщить(Строка.ИмяТаблицыХранения + " -> " + Строка.Метаданные);
КонецЦикла;

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

Как узнать размер таблиц в MS SQL Server

Если база работает на MS SQL Server, самый быстрый способ — открыть SQL Server Management Studio и выполнить запрос к системным представлениям. Встроенная процедура sp_spaceused показывает размер одной таблицы, а для обзора всех таблиц удобнее запрос к sys.dm_db_partition_stats или sys.allocation_units.

sql
SELECT t.NAME AS TableName,
  SUM(a.total_pages) * 8 / 1024 AS SizeMB
FROM sys.tables t
JOIN sys.indexes i ON t.object_id = i.object_id
JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY t.NAME
ORDER BY SizeMB DESC;

Запрос возвращает размер в мегабайтах с учётом данных и индексов. Если нужно разделить данные и индексы, группируйте по типу выделения (тип 1 — строковые данные, тип 2 — LOB-данные, тип 3 — данные переполнения). Это важно: таблицы с вложениями файлов часто «весят» за счёт LOB-полей.

Альтернатива без запросов: в SSMS правый клик по базе → «Отчёты» → «Стандартные отчёты» → «Использование диска таблицей» (Disk Usage by Table). Отчёт покажет число строк, зарезервированное и фактически используемое место по каждой таблице.

Порядок действий для MS SQL
  1. 1
    Подключитесь к SQL Server через Management Studio под учётной записью с правами на чтение системных представлений
  2. 2
    Выполните запрос к sys.allocation_units или откройте стандартный отчёт по использованию диска
  3. 3
    Отсортируйте результат по убыванию размера и выпишите топ-10 таблиц
  4. 4
    Сопоставьте имена таблиц с метаданными через ПолучитьСтруктуруХраненияБазыДанных()
  5. 5
    Примите решение по каждой крупной таблице: чистка, свёртка, архивация или штатная ситуация

Как узнать размер таблиц в PostgreSQL

В PostgreSQL используются функции pg_relation_size() (только данные таблицы), pg_indexes_size() (индексы) и pg_total_relation_size() (таблица вместе с индексами и TOAST-данными). Для анализа всей базы удобен запрос к каталогу pg_class или представлению pg_stat_user_tables.

sql
SELECT relname AS table_name,
  pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;

Запрос покажет двадцать самых тяжёлых таблиц в читаемом формате (MB, GB). Обратите внимание: в PostgreSQL таблицы с большими бинарными полями хранят часть данных в TOAST-таблицах, которые в выборке будут отдельными строками с именами вида pg_toast_... — их размер нужно приплюсовывать к основной таблице, функция pg_total_relation_size() делает это автоматически.

Выполнять запросы можно через pgAdmin или консольный клиент psql. Достаточно прав на чтение системного каталога — изменять ничего не требуется, анализ полностью безопасен для рабочей базы.

Как оценить размер таблиц в файловой базе

Файловая база 1С хранится в едином файле 1Cv8.1CD, и штатных средств просмотра размеров отдельных таблиц в конфигураторе нет. Прямой путь — использовать сторонние инструменты анализа структуры файла (например, известные в сообществе утилиты просмотра 1CD), которые показывают список таблиц и занимаемое ими место внутри файла.

Косвенный способ — оценка по количеству записей. Через запрос или консоль кода можно посчитать число строк в каждой таблице метаданных и сопоставить с типичным размером записи. Метод грубый, но позволяет найти аномально разросшиеся регистры без сторонних инструментов.

Ещё один индикатор — сравнение размера файла до и после операций. Например, если после очистки регистра сведений файл не уменьшился, это нормально: файловая база не сжимается автоматически, освобождённое место остаётся зарезервированным. Реальное уменьшение даст только тестирование и исправление с реструктуризацией или выгрузка-загрузка через dt.

Универсальные обработки и типовые механизмы

Существуют внешние обработки, которые выводят размеры таблиц прямо из режима предприятия: они формируют SQL-запрос к СУБД через внешние источники данных или ADO и сразу показывают привязку к метаданным. Такие обработки удобны, когда у специалиста нет доступа к консоли СУБД, но есть права администратора в 1С.

В конфигурациях на БСП (библиотека стандартных подсистем) есть смежные механизмы: например, оценку объёма данных дают отчёты по версионированию объектов и по местам хранения файлов. Они не показывают физический размер таблиц, но помогают понять, какие данные занимают место логически.

Сравнение способов

Запрос к СУБД напрямую

Самый точный и быстрый для клиент-серверной базы. Требует доступа к SQL Server или PostgreSQL и умения сопоставлять имена таблиц.

Внешняя обработка из режима предприятия

Подходит, когда доступа к СУБД нет. Точность зависит от реализации обработки, нужны права администратора в 1С.

Анализ файла 1Cv8.1CD сторонней утилитой

Единственный прямой способ для файловой базы. Работать только с копией файла, результат без привязки к метаданным придётся сопоставлять вручную.

Подсчёт записей запросом

Грубая оценка без внешних инструментов. Не показывает реальный объём, но выявляет аномально большие таблицы.

Что делать с найденными «тяжёлыми» таблицами

Обнаружив таблицу-лидера по размеру, не спешите её чистить. Сначала определите, штатный это рост или аномалия. Регистр бухгалтерии с проводками за десять лет — это норма; регистр изменений обмена с миллионами неотправленных записей — признак сломанного обмена.

Типовые меры: отключение или настройка версионирования объектов, очистка регистров изменений после успешных обменов, перенос файлов из базы в тома на диске, свёртка старых периодов, настройка сроков хранения в механизмах истории данных. Любую массовую чистку выполняйте сначала на копии базы и только после резервного копирования.

Типичные ошибки
01
Удаление записей напрямую SQL-запросом, минуя платформу — нарушает целостность данных и логику итогов регистров
02
Оценка размера базы только по размеру файла 1Cv8.1CD — файл не уменьшается после удаления данных и вводит в заблуждение
03
Игнорирование индексов и TOAST-таблиц — реальный объём таблицы оказывается в разы больше, чем показывает размер только данных
04
Чистка регистров изменений при неработающем обмене — узлы «забывают» изменения, и данные в базах расходятся
Контрольные точки

Как проверить результат

Сопоставление имён
Норма

Каждая крупная таблица СУБД связана с конкретным объектом метаданных

Тревожный признак

Есть большие таблицы, назначение которых не удалось определить

Динамика роста
Норма

Размер таблиц растёт пропорционально объёму вводимых документов

Тревожный признак

Одна таблица растёт скачкообразно без деловых причин

Эффект после чистки
Норма

Количество записей и занимаемое место в СУБД уменьшились

Тревожный признак

Записи удалены, но место не освободилось — нужен shrink/реиндексация или выгрузка-загрузка

После чистки в клиент-серверной базе может потребоваться сжатие файлов данных (shrink) или перестроение индексов, чтобы освобождённое место вернулось операционной системе. Эти операции ресурсоёмкие — планируйте их на нерабочее время.

Частые вопросы

Можно ли узнать размер таблиц штатными средствами конфигуратора?

Нет, конфигуратор не показывает физический размер таблиц. Ближайший штатный инструмент — функция ПолучитьСтруктуруХраненияБазыДанных(), но она возвращает только структуру без размеров. Размеры получают со стороны СУБД или внешними обработками.

Почему после удаления данных размер базы не уменьшился?

Файловая база 1Cv8.1CD и файлы данных СУБД не отдают освобождённое место операционной системе автоматически — оно остаётся зарезервированным под будущие записи. Для файловой базы помогает выгрузка и загрузка через dt, для SQL-баз — операции сжатия файлов, которые следует выполнять осознанно и в нерабочее время.

Опасно ли выполнять запросы к системным представлениям СУБД?

Запросы на чтение (SELECT к sys.*, pg_catalog) безопасны и не меняют данные. Опасны обратные действия: UPDATE или DELETE напрямую в таблицах базы 1С. Такие изменения обходят логику платформы и почти всегда приводят к повреждению данных.

Как найти, какие документы сильнее всего раздувают регистры?

Выполните запрос в консоли запросов 1С с группировкой по регистратору: выберите регистратор и количество записей из проблемного регистра, отсортируйте по убыванию. Документы с аномальным числом движений (например, десятки тысяч строк на один документ) обычно указывают на ошибку в проведении или обмене.

Чем отличается размер таблицы от размера базы целиком?

Размер базы — это сумма всех таблиц, индексов, служебных структур СУБД и журнала транзакций. Журнал транзакций в MS SQL при модели полного восстановления может занимать сопоставимо с данными и больше, поэтому анализ только таблиц не всегда объясняет, куда ушло место на диске.

Нужно ли останавливать работу пользователей для анализа размеров?

Для чтения системных представлений и выполнения ПолучитьСтруктуруХраненияБазыДанных() останавливать работу не требуется. Монопольный режим понадобится только для операций, меняющих структуру или данные: тестирования и исправления, свёртки, массовой чистки.

Итог

Что важно запомнить

Размер таблиц клиент-серверной базы точнее всего показывают запросы к системным представлениям СУБД, файловой — сторонние анализаторы файла 1Cv8.1CD на копии. Имена таблиц сопоставляют с метаданными через ПолучитьСтруктуруХраненияБазыДанных(). Найденные аномалии устраняют штатными средствами 1С после резервного копирования, никогда не редактируя таблицы напрямую в СУБД.