Администрирование · 12 мин
Как узнать размер таблиц базы 1С
Как узнать размер таблиц базы 1С в файловом и клиент-серверном варианте: SQL-запросы, обработки, консоль администрирования. Пошаговые инструкции и проверка результата.
Размер таблиц базы 1С нужно знать, когда информационная база растёт слишком быстро, дисковое пространство заканчивается, а бэкапы становятся громоздкими. Чаще всего виновниками оказываются несколько таблиц: регистры сведений с историей версий, таблицы журналов изменений, служебные таблицы полнотекстового поиска или таблицы с вложениями файлов.
Способ определения размера зависит от того, как развёрнута база. Для клиент-серверного варианта (MS SQL Server, PostgreSQL) самый точный результат дают запросы к системным представлениям СУБД. Для файлового варианта прямых инструментов нет, но есть обходные пути через внешние обработки и анализ структуры файла 1Cv8.1CD.
Важно понимать: имена таблиц на уровне СУБД не совпадают с именами объектов метаданных. Документ «Реализация товаров и услуг» в SQL-базе может называться, например, _Document123. Поэтому перед анализом размеров полезно получить соответствие имён — об этом тоже расскажем ниже.
Почему размер таблиц важно контролировать
Рост отдельных таблиц напрямую влияет на скорость работы: запросы к раздутым регистрам выполняются медленнее, реструктуризация при обновлении конфигурации занимает часы, а регламентные операции СУБД (реиндексация, обновление статистики) перестают укладываться в ночное окно.
Типичные «тяжёлые» объекты в базах 1С: регистр сведений «Версии объектов» (если включено версионирование), таблицы хранения двоичных данных файлов, регистры изменений для обменов, таблица журнала регистрации в старых форматах, а также регистры расчёта и бухгалтерии с большим количеством движений за много лет.
Регулярный контроль размеров позволяет вовремя заметить аномалию: например, регистр, который вырос в десять раз за месяц из-за ошибочной настройки обмена или фонового задания, выполняющего лишние записи.
Как сопоставить таблицы СУБД с объектами метаданных
Прежде чем анализировать размеры, нужно понять, какая физическая таблица чему соответствует. Для этого платформа предоставляет функцию встроенного языка ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает таблицу значений с колонками: имя таблицы хранения, имя метаданных, назначение таблицы, а также описание полей и индексов.
Функцию можно выполнить через консоль кода, внешнюю обработку или временную обработку, запущенную под пользователем с правами администратора. Результат удобно выгрузить в табличный документ или файл, чтобы затем сопоставлять с данными о размерах из СУБД.
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из СтруктураХранения Цикл
Сообщить(Строка.ИмяТаблицыХранения + " -> " + Строка.Метаданные);
КонецЦикла;У функции есть параметры: можно получить структуру по конкретным метаданным и в формате, пригодном для выгрузки в СУБД-независимом виде. Для разового анализа достаточно вызова без параметров, но на больших конфигурациях результат будет объёмным — лучше сразу сохранить его в файл.
Как узнать размер таблиц в MS SQL Server
Если база работает на MS SQL Server, самый быстрый способ — открыть SQL Server Management Studio и выполнить запрос к системным представлениям. Встроенная процедура sp_spaceused показывает размер одной таблицы, а для обзора всех таблиц удобнее запрос к sys.dm_db_partition_stats или sys.allocation_units.
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). Отчёт покажет число строк, зарезервированное и фактически используемое место по каждой таблице.
- 1Подключитесь к SQL Server через Management Studio под учётной записью с правами на чтение системных представлений
- 2Выполните запрос к sys.allocation_units или откройте стандартный отчёт по использованию диска
- 3Отсортируйте результат по убыванию размера и выпишите топ-10 таблиц
- 4Сопоставьте имена таблиц с метаданными через ПолучитьСтруктуруХраненияБазыДанных()
- 5Примите решение по каждой крупной таблице: чистка, свёртка, архивация или штатная ситуация
Как узнать размер таблиц в PostgreSQL
В PostgreSQL используются функции pg_relation_size() (только данные таблицы), pg_indexes_size() (индексы) и pg_total_relation_size() (таблица вместе с индексами и TOAST-данными). Для анализа всей базы удобен запрос к каталогу pg_class или представлению pg_stat_user_tables.
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С.
Единственный прямой способ для файловой базы. Работать только с копией файла, результат без привязки к метаданным придётся сопоставлять вручную.
Грубая оценка без внешних инструментов. Не показывает реальный объём, но выявляет аномально большие таблицы.
Что делать с найденными «тяжёлыми» таблицами
Обнаружив таблицу-лидера по размеру, не спешите её чистить. Сначала определите, штатный это рост или аномалия. Регистр бухгалтерии с проводками за десять лет — это норма; регистр изменений обмена с миллионами неотправленных записей — признак сломанного обмена.
Типовые меры: отключение или настройка версионирования объектов, очистка регистров изменений после успешных обменов, перенос файлов из базы в тома на диске, свёртка старых периодов, настройка сроков хранения в механизмах истории данных. Любую массовую чистку выполняйте сначала на копии базы и только после резервного копирования.
Как проверить результат
Каждая крупная таблица СУБД связана с конкретным объектом метаданных
Есть большие таблицы, назначение которых не удалось определить
Размер таблиц растёт пропорционально объёму вводимых документов
Одна таблица растёт скачкообразно без деловых причин
Количество записей и занимаемое место в СУБД уменьшились
Записи удалены, но место не освободилось — нужен shrink/реиндексация или выгрузка-загрузка
После чистки в клиент-серверной базе может потребоваться сжатие файлов данных (shrink) или перестроение индексов, чтобы освобождённое место вернулось операционной системе. Эти операции ресурсоёмкие — планируйте их на нерабочее время.
Частые вопросы
Можно ли узнать размер таблиц штатными средствами конфигуратора?
Нет, конфигуратор не показывает физический размер таблиц. Ближайший штатный инструмент — функция ПолучитьСтруктуруХраненияБазыДанных(), но она возвращает только структуру без размеров. Размеры получают со стороны СУБД или внешними обработками.
Почему после удаления данных размер базы не уменьшился?
Файловая база 1Cv8.1CD и файлы данных СУБД не отдают освобождённое место операционной системе автоматически — оно остаётся зарезервированным под будущие записи. Для файловой базы помогает выгрузка и загрузка через dt, для SQL-баз — операции сжатия файлов, которые следует выполнять осознанно и в нерабочее время.
Опасно ли выполнять запросы к системным представлениям СУБД?
Запросы на чтение (SELECT к sys.*, pg_catalog) безопасны и не меняют данные. Опасны обратные действия: UPDATE или DELETE напрямую в таблицах базы 1С. Такие изменения обходят логику платформы и почти всегда приводят к повреждению данных.
Как найти, какие документы сильнее всего раздувают регистры?
Выполните запрос в консоли запросов 1С с группировкой по регистратору: выберите регистратор и количество записей из проблемного регистра, отсортируйте по убыванию. Документы с аномальным числом движений (например, десятки тысяч строк на один документ) обычно указывают на ошибку в проведении или обмене.
Чем отличается размер таблицы от размера базы целиком?
Размер базы — это сумма всех таблиц, индексов, служебных структур СУБД и журнала транзакций. Журнал транзакций в MS SQL при модели полного восстановления может занимать сопоставимо с данными и больше, поэтому анализ только таблиц не всегда объясняет, куда ушло место на диске.
Нужно ли останавливать работу пользователей для анализа размеров?
Для чтения системных представлений и выполнения ПолучитьСтруктуруХраненияБазыДанных() останавливать работу не требуется. Монопольный режим понадобится только для операций, меняющих структуру или данные: тестирования и исправления, свёртки, массовой чистки.
Что важно запомнить
Размер таблиц клиент-серверной базы точнее всего показывают запросы к системным представлениям СУБД, файловой — сторонние анализаторы файла 1Cv8.1CD на копии. Имена таблиц сопоставляют с метаданными через ПолучитьСтруктуруХраненияБазыДанных(). Найденные аномалии устраняют штатными средствами 1С после резервного копирования, никогда не редактируя таблицы напрямую в СУБД.