Администрирование · 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).
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 и проанализировать её там. Это трудоёмко, но даёт точные цифры и заодно позволяет проверить, как база будет вести себя при переходе на клиент-серверный вариант.
Сравнение способов проверки
Точный физический размер с индексами. Подходит для клиент-серверных баз, требует доступа к серверу СУБД.
Показывают количество записей и сопоставление имён. Работают в любой базе, но дают косвенную оценку размера.
Только общий объём файловой базы без детализации по таблицам. Подходит для грубой оценки.
Как сопоставить техническое имя таблицы с объектом 1С
Получив список самых больших таблиц вида _InfoRg10231 или _AccumRgT5847, нужно понять, что за ними стоит. Для этого в конфигураторе или через обработку вызывается функция ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает таблицу значений с колонками: имя объекта метаданных, имя таблицы хранения, назначение.
Пример кода для вывода соответствия в табличный документ:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из СтруктураХранения Цикл
Сообщить(Строка.ИмяТаблицыХранения + " -> "
+ Строка.Метаданные);
КонецЦикла;
Практический совет: выгрузите структуру хранения в файл один раз и сохраните рядом с результатами анализа размеров. Имена таблиц могут меняться после реструктуризации при обновлении конфигурации, поэтому старое сопоставление периодически нужно обновлять.
- 1Выполните SQL-запрос размеров таблиц на сервере СУБД и сохраните топ-30 по объёму
- 2Получите структуру хранения базы данных через ПолучитьСтруктуруХраненияБазыДанных()
- 3Сопоставьте технические имена с объектами метаданных
- 4Проверьте табличные части и таблицы изменений найденных объектов — их размер складывается
- 5Примите решение: свёртка, очистка устаревших данных, отключение ненужной регистрации изменений
Что чаще всего занимает место и как проверить результат
На практике лидеры по объёму обычно предсказуемы: регистры накопления и сведений с большим числом движений, таблицы изменений планов обмена (префикс с суффиксом _ChngR), журналы регистрации, хранилища значений с вложенными файлами и версии объектов, если включено версионирование. Таблицы изменений особенно коварны: они растут незаметно, если узлы обмена давно не получали подтверждения.
После очистки или свёртки проверьте результат дважды: по количеству записей в таблице и по физическому размеру на диске. Важный нюанс — удаление строк само по себе не уменьшает файл базы. В MS SQL Server освобождённое место остаётся зарезервированным (вернуть его можно через сжатие базы, что само по себе спорная операция), в PostgreSQL потребуется VACUUM FULL, в файловой базе — тестирование и исправление со сжатием.
Как проверить результат
Совпадает с ожиданием после очистки или свёртки
Число строк не уменьшилось — удаление затронуло не ту таблицу
Уменьшился после сжатия или VACUUM FULL
Размер прежний — место освобождено внутри, но не возвращено диску
Размер стабилен, подтверждения обмена приходят регулярно
Таблица растёт — узел обмена не подтверждает получение сообщений
Типичные ошибки и ограничения
Частая ошибка — оценивать размер таблицы только по числу строк. Тысяча записей с хранилищами значений, в которых лежат сканы документов, может весить больше, чем миллион строк регистра с числовыми полями. Поэтому для поиска «тяжёлых» таблиц всегда смотрите байты, а не только записи.
Вторая ошибка — забывать про индексы и итоги. Регистры накопления хранят таблицу итогов отдельно, и она бывает сопоставима с основной. Третья — выполнять анализ на копии, снятой давно: структура хранения меняется при обновлении конфигурации, и сопоставление имён устаревает.
Ограничение безопасной самостоятельной работы: просмотр размеров и структуры хранения абсолютно безопасен, но любые действия по удалению данных напрямую запросами к СУБД категорически не рекомендуются — это нарушает целостность ссылок и поддержку. Очистку выполняйте штатными средствами 1С: свёрткой, обработками удаления помеченных объектов, регламентными операциями.
Частые вопросы
Можно ли узнать размер таблицы штатными средствами конфигуратора?
Нет, конфигуратор не показывает физический размер таблиц. Он позволяет получить только структуру хранения — соответствие объектов метаданных и технических имён. Сам размер определяется средствами СУБД для клиент-серверных баз или оценивается по количеству записей через обработки для файловых баз.
Почему после удаления данных размер базы не уменьшился?
Удаление строк освобождает место внутри файлов базы, но не возвращает его операционной системе. В MS SQL Server нужно сжатие базы или файлов данных, в PostgreSQL — VACUUM FULL, в файловой базе 1С — тестирование и исправление с включённым сжатием. До выполнения этих операций файл останется прежнего размера.
Как найти, какой справочник или документ занимает больше всего места?
Выполните запрос размеров таблиц на СУБД, возьмите топ по объёму, затем сопоставьте технические имена с метаданными через ПолучитьСтруктуруХраненияБазыДанных(). Не забудьте просуммировать основную таблицу объекта со всеми его табличными частями — у документов они бывают крупнее шапки.
Что за таблицы с суффиксом _ChngR и почему они такие большие?
Это таблицы регистрации изменений планов обмена. Они накапливают записи обо всех изменённых объектах до тех пор, пока узел обмена не подтвердит получение сообщения. Если обмен давно не выполнялся или узел неактивен, таблица растёт бесконечно. Решение — настроить регулярный обмен и удалить неиспользуемые узлы.
Безопасно ли выполнять SQL-запросы к базе 1С?
Запросы на чтение (SELECT к системным представлениям и таблицам) безопасны, хотя при больших объёмах могут создавать нагрузку — выполняйте их в нерабочее время. Любые запросы на изменение или удаление данных напрямую в обход платформы опасны: они нарушают целостность базы, итоги регистров и механизмы обмена.
Как часто нужно контролировать размер таблиц?
Для активно растущих баз разумно проверять топ таблиц по объёму ежемесячно и настроить мониторинг свободного места на дисках СУБД. Резкий скачок роста конкретной таблицы — сигнал проверить новые документы, регламентные задания или сбой обмена, пока проблема не привела к заполнению диска.
Что важно запомнить
Размер таблицы 1С определяется на уровне СУБД: отчётами SSMS или запросами к системным представлениям в MS SQL Server и функциями pg_total_relation_size в PostgreSQL. Технические имена таблиц сопоставляются с метаданными через ПолучитьСтруктуруХраненияБазыДанных(). Удаление данных не уменьшает файл базы без сжатия, а прямые изменения в базе запросами запрещены — очистка выполняется только штатными средствами платформы после резервного копирования.