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

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

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

Как посмотреть размер таблиц базы 1С в MS SQL Server, PostgreSQL и через обработки. Запросы, поиск самых больших таблиц, очистка итогов и версионирования.

С ростом базы 1С администратору рано или поздно нужно понять, какие таблицы занимают больше всего места. Это требуется при планировании дискового пространства, перед свёрткой базы, при диагностике медленной работы и перед настройкой регламентного обслуживания. Способ просмотра зависит от того, где развёрнута база: на MS SQL Server, PostgreSQL, IBM Db2 или в файловом варианте.

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

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

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

Платформа 1С:Предприятие создаёт в СУБД таблицы со служебными именами: _Document (документы), _Reference (справочники), _AccumRg (регистры накопления), _InfoRg (регистры сведений), _Const (константы) и другие, с числовыми суффиксами. По одному имени таблицы невозможно понять, что это, например, документ «Реализация товаров и услуг» — соответствие хранится во внутренней структуре базы.

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

Просмотр размера таблиц в MS SQL Server

Самый быстрый способ без запросов — встроенный отчёт SQL Server Management Studio (SSMS). Откройте SSMS, щёлкните правой кнопкой по базе данных, выберите «Отчёты» → «Стандартные отчёты» → «Использование диска по таблицам» (Disk Usage by Table). Отчёт покажет все таблицы с количеством строк, зарезервированным местом, объёмом данных и индексов.

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

SELECT

t.NAME AS TableName,

SUM(p.rows) AS RowCounts,

SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB,

SUM(a.used_pages) * 8 / 1024 AS UsedSpaceMB

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 TotalSpaceMB DESC

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

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

Просмотр размера таблиц в PostgreSQL

В PostgreSQL размер таблицы с учётом индексов и служебных данных возвращает функция pg_total_relation_size, а для удобного чтения её оборачивают в pg_size_pretty. Запрос для вывода всех таблиц схемы public по убыванию размера:

SELECT

relname AS table_name,

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

pg_size_pretty(pg_relation_size(c.oid)) AS data_size

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;

Разницу между total_size и data_size составляют индексы и TOAST-данные (длинные значения, вынесенные из основной таблицы). Если индексы занимают больше места, чем сами данные, это нормально для регистров с большим числом измерений, но стоит проверить, нет ли неиспользуемых индексов.

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

Сопоставление таблиц СУБД с объектами 1С

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

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

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

Что чаще всего раздувает базу 1С

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

  • Регистры сведений с версионированием и историей — например, истории изменений объектов при включённом версионировании без ограничения срока хранения.
  • Регистры накопления по товарам и партиям — растут пропорционально числу документов и не уменьшаются при пометке на удаление до физического удаления.
  • Таблицы итогов и итоговых регистров — служебные таблицы _AccumRgOpt, _AccumRgTot; раздуваются при большом числе периодов с включёнными итогами.
  • Протоколы обменов и очереди сообщений — регистрация изменений для планов обмена, неудалённые сообщения интеграции.
  • Присоединённые файлы — если файлы хранятся в базе, а не в томах на диске, таблица двоичных данных может занимать большую часть объёма.
  • Журналы регистрации — при файловом хранении журнала и длительном сроке хранения.
Таблица большая, строк малоНеосвоенное пространство

Проверьте разницу reserved/used в SQL Server — вероятно, нужна дефрагментация

Индексы больше данныхИзбыточная индексация

Проверьте неиспользуемые индексы и итоговые таблицы регистров

Быстрый прирост за месяцАктивный источник роста

Сравните размеры по двум замерам и найдите таблицы с максимальной дельтой

Как безопасно уменьшить размер таблиц

Уменьшение размера — отдельная задача, и выполнять её нужно только после резервного копирования. Прямое удаление данных запросами SQL из таблиц 1С категорически запрещено: это нарушает целостность базы и лишает поддержки. Все операции выполняются штатными средствами платформы.

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

Типичные ошибки при анализе размера таблиц

Первая ошибка — судить о размере базы только по размеру файла .mdf или каталога PostgreSQL. Файл включает свободное место, журнал транзакций и индексы; реальную картину по объектам даёт только анализ по таблицам.

Вторая ошибка — игнорировать журнал транзакций. В MS SQL Server файл .ldf при полной модели восстановления и отсутствии резервных копий журнала может превышать размер самих данных. Размер журнала проверяется отдельно, например командой DBCC SQLPERF(LOGSPACE).

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

Типичные ошибки
01
Оценка базы по размеру файла .mdf — файл включает свободное место и не показывает, какие объекты тяжёлые
02
Удаление данных напрямую через SQL — нарушает целостность и лишает поддержки
03
Ожидание уменьшения файла сразу после удаления объектов — требуется сжатие средствами СУБД
04
Очистка без резервной копии — при ошибке данные восстановить будет неоткуда

Проверка результата и регулярный контроль

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

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

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

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

Размер целевых таблиц после очистки
Норма

Размер уменьшился, база работает штатно

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

Размер не изменился — данные удалены логически, нужно сжатие, или удаление не выполнено

Свободное место на диске
Норма

Место появилось после сжатия файлов

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

Места нет — проверьте журнал транзакций и неосвоенное пространство

Динамика роста за неделю
Норма

Прирост соответствует объёму вводимых документов

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

Резкий скачок без причины — ищите источник: обмены, версии, файлы

Итог

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

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

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

Можно ли посмотреть размер таблиц прямо в конфигураторе 1С?

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

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

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

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

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

Какая таблица отвечает за конкретный документ или регистр?

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

Опасно ли выполнять запросы на чтение размеров в рабочее время?

Запросы к системным представлениям (sys.tables, pg_class) безопасны и практически не нагружают сервер — они читают метаданные. Осторожность нужна только с операциями изменения: сжатием, перестроением индексов и очисткой, которые создают нагрузку и блокировки, поэтому их планируют на нерабочие часы.

Что делать, если больше всего места занимают присоединённые файлы?

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