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

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

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

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

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

Знание размеров таблиц нужно, когда база растёт быстрее ожиданий, замедляется работа отчётов, заканчивается дисковое пространство или планируется свёртка и архивация данных. Один большой регистр накопления или журнал изменений может занимать больше половины объёма всей базы, и без точных цифр оптимизировать её невозможно.

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

Как 1С хранит таблицы и почему имена не совпадают

Платформа 1С:Предприятие при создании базы данных формирует физические таблицы с автоматически сгенерированными именами. Справочники получают префикс _Reference, документы — _Document, регистры сведений — _InfoRg, регистры накопления — _AccumRg, регистры бухгалтерии — _AccRg. После префикса идёт числовой идентификатор, который не связан с именем объекта в конфигураторе.

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

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

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

Если база 1С работает на MS SQL Server, самый быстрый способ — встроенный отчёт SQL Server Management Studio. Откройте SSMS, найдите нужную базу в обозревателе объектов, щёлкните по ней правой кнопкой мыши и выберите «Отчёты» → «Стандартные отчёты» → «Использование диска по таблицам». Отчёт покажет все таблицы с количеством строк, зарезервированным и фактически использованным пространством, включая индексы.

Для автоматизации удобнее запрос к системным представлениям. Он возвращает те же данные, но позволяет фильтровать, сортировать и сохранять результат:

SELECT 

t.name AS TableName,

SUM(s.used_page_count) * 8 / 1024 AS SizeMB,

SUM(p.row_count) AS RowCount

FROM sys.dm_db_partition_stats s

JOIN sys.tables t ON s.object_id = t.object_id

JOIN sys.indexes i ON s.object_id = i.object_id

AND s.index_id = i.index_id

JOIN sys.partitions p ON s.object_id = p.object_id

AND s.index_id = p.index_id

GROUP BY t.name

ORDER BY SizeMB DESC;

Запрос возвращает размер в мегабайтах вместе с индексами и количеством строк. Обратите внимание: при подсчёте строк возможно дублирование из-за нескольких индексов — для точного числа записей используйте COUNT(*) по конкретной таблице или берите row_count только для кластерного индекса (index_id = 1).

sql
EXEC sp_spaceused '_Document123'; -- размер конкретной таблицы: данные, индексы, строки

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

Для баз на PostgreSQL размер таблицы определяется встроенными функциями. Функция pg_total_relation_size возвращает полный объём таблицы с индексами и служебными данными, pg_relation_size — только данные, pg_indexes_size — только индексы. Для читаемого вывода используется pg_size_pretty.

Запрос для просмотра всех таблиц базы с сортировкой по размеру выглядит так:

SELECT 

relname AS TableName,

pg_size_pretty(pg_total_relation_size(c.oid)) AS TotalSize,

pg_total_relation_size(c.oid) / 1024 / 1024 AS SizeMB

FROM pg_class c

JOIN pg_namespace n ON n.oid = c.relnamespace

WHERE c.relkind = 'r'

AND n.nspname = 'public'

ORDER BY pg_total_relation_size(c.oid) DESC

LIMIT 30;

Выполнять запрос можно через pgAdmin или консольный клиент psql. Имена таблиц будут в нижнем регистре с теми же префиксами 1С. Учтите, что PostgreSQL показывает физически занятое место, включая «мёртвые» строки после массовых удалений — реальный объём полезных данных может быть заметно меньше до выполнения VACUUM FULL или реиндексации.

Как определить размер таблиц в файловой базе 1С

В файловом варианте все данные хранятся в одном файле 1Cv8.1CD, и средствами самой платформы размер отдельной таблицы напрямую не выводится. Ориентир первого уровня — общий размер файла базы в проводнике. Если он приближается к нескольким гигабайтам, пора искать, какие объекты занимают место.

Для детального анализа используются внешние обработки, которые запускаются в режиме 1С:Предприятие и показывают количество записей по каждому объекту метаданных. Количество записей — косвенный, но практичный показатель: таблица с миллионами строк почти всегда и занимает больше всего места. Такие обработки используют ПолучитьСтруктуруХраненияБазыДанных() и запросы вида «ВЫБРАТЬ КОЛИЧЕСТВО(*)» по каждой таблице.

Альтернативный путь — опубликовать базу на тестовом SQL Server или PostgreSQL и проанализировать её там. Это трудоёмко, но даёт точные цифры и заодно позволяет проверить, как база будет вести себя при переходе на клиент-серверный вариант.

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

Отчёты и запросы СУБД

Точный физический размер с индексами. Подходит для клиент-серверных баз, требует доступа к серверу СУБД.

Обработки анализа структуры хранения

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

Размер файла 1Cv8.1CD

Только общий объём файловой базы без детализации по таблицам. Подходит для грубой оценки.

Как сопоставить техническое имя таблицы с объектом 1С

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

Пример кода для вывода соответствия в табличный документ:

СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();

Для Каждого Строка Из СтруктураХранения Цикл

Сообщить(Строка.ИмяТаблицыХранения + " -> "

+ Строка.Метаданные);

КонецЦикла;

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

Порядок действий для клиент-серверной базы
  1. 1
    Выполните SQL-запрос размеров таблиц на сервере СУБД и сохраните топ-30 по объёму
  2. 2
    Получите структуру хранения базы данных через ПолучитьСтруктуруХраненияБазыДанных()
  3. 3
    Сопоставьте технические имена с объектами метаданных
  4. 4
    Проверьте табличные части и таблицы изменений найденных объектов — их размер складывается
  5. 5
    Примите решение: свёртка, очистка устаревших данных, отключение ненужной регистрации изменений

Что чаще всего занимает место и как проверить результат

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

После очистки или свёртки проверьте результат дважды: по количеству записей в таблице и по физическому размеру на диске. Важный нюанс — удаление строк само по себе не уменьшает файл базы. В MS SQL Server освобождённое место остаётся зарезервированным (вернуть его можно через сжатие базы, что само по себе спорная операция), в PostgreSQL потребуется VACUUM FULL, в файловой базе — тестирование и исправление со сжатием.

Контрольные точки

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

Количество записей в таблице
Норма

Совпадает с ожиданием после очистки или свёртки

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

Число строк не уменьшилось — удаление затронуло не ту таблицу

Физический размер файла базы
Норма

Уменьшился после сжатия или VACUUM FULL

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

Размер прежний — место освобождено внутри, но не возвращено диску

Таблицы изменений планов обмена
Норма

Размер стабилен, подтверждения обмена приходят регулярно

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

Таблица растёт — узел обмена не подтверждает получение сообщений

Типичные ошибки и ограничения

Частая ошибка — оценивать размер таблицы только по числу строк. Тысяча записей с хранилищами значений, в которых лежат сканы документов, может весить больше, чем миллион строк регистра с числовыми полями. Поэтому для поиска «тяжёлых» таблиц всегда смотрите байты, а не только записи.

Вторая ошибка — забывать про индексы и итоги. Регистры накопления хранят таблицу итогов отдельно, и она бывает сопоставима с основной. Третья — выполнять анализ на копии, снятой давно: структура хранения меняется при обновлении конфигурации, и сопоставление имён устаревает.

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

Типичные ошибки
01
Судить о размере только по числу строк — таблица с файлами в хранилищах значений весит больше при меньшем числе записей
02
Искать таблицу по имени метаданных в СУБД — физические имена технические, нужна структура хранения
03
Ждать уменьшения файла базы сразу после удаления данных — без сжатия или VACUUM FULL место не возвращается диску
04
Игнорировать таблицы изменений планов обмена — они незаметно раздувают базу при сбоях обмена
05
Использовать устаревшее сопоставление имён после обновления конфигурации и реструктуризации

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

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

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

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

Удаление строк освобождает место внутри файлов базы, но не возвращает его операционной системе. В MS SQL Server нужно сжатие базы или файлов данных, в PostgreSQL — VACUUM FULL, в файловой базе 1С — тестирование и исправление с включённым сжатием. До выполнения этих операций файл останется прежнего размера.

Как найти, какой справочник или документ занимает больше всего места?

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

Что за таблицы с суффиксом _ChngR и почему они такие большие?

Это таблицы регистрации изменений планов обмена. Они накапливают записи обо всех изменённых объектах до тех пор, пока узел обмена не подтвердит получение сообщения. Если обмен давно не выполнялся или узел неактивен, таблица растёт бесконечно. Решение — настроить регулярный обмен и удалить неиспользуемые узлы.

Безопасно ли выполнять SQL-запросы к базе 1С?

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

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

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

Итог

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

Размер таблицы 1С определяется на уровне СУБД: отчётами SSMS или запросами к системным представлениям в MS SQL Server и функциями pg_total_relation_size в PostgreSQL. Технические имена таблиц сопоставляются с метаданными через ПолучитьСтруктуруХраненияБазыДанных(). Удаление данных не уменьшает файл базы без сжатия, а прямые изменения в базе запросами запрещены — очистка выполняется только штатными средствами платформы после резервного копирования.