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

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

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

Как узнать размер таблиц базы 1С в MS SQL Server: запросы через sys.dm_db_partition_stats и sp_spaceused, расшифровка имён таблиц, поиск самых больших объектов.

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

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

Ниже приведены готовые запросы для SQL Server Management Studio (SSMS), способы расшифровки имён таблиц и рекомендации, что делать с найденными «тяжёлыми» объектами. Все действия выполняются запросами на чтение и безопасны для рабочей базы.

Где смотреть размеры: SSMS и права доступа

Основной инструмент — SQL Server Management Studio. Подключитесь к серверу, где размещена база 1С, и откройте новый запрос в контексте нужной базы данных. Для выполнения запросов к системным представлениям достаточно прав на чтение; отдельные динамические представления могут требовать разрешения VIEW DATABASE STATE.

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

Важно понимать разницу: размер файлов базы данных (MDF/LDF) — это общий объём, включая пустое место внутри файлов. Размер таблиц — фактически занятое данными и индексами пространство. После удаления данных файлы не уменьшаются сами, поэтому цифры могут заметно отличаться.

Быстрый способ: sp_spaceused для одной таблицы

Если нужно проверить конкретную таблицу, используйте встроенную процедуру:

USE ИмяБазы1С;

GO

EXEC sp_spaceused '_Document123';

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

Минус способа — таблицы приходится проверять по одной. Для общей картины по всей базе удобнее запрос к системным представлениям, описанный далее.

Запрос: размеры всех таблиц базы 1С

Универсальный запрос к sys.dm_db_partition_stats возвращает все таблицы с сортировкой по занимаемому месту. Он безопасен, выполняется быстро даже на больших базах и не блокирует работу пользователей.

sql
SELECT t.NAME AS TableName, SUM(s.used_page_count) * 8 / 1024 AS SizeMB, SUM(p.rows) AS RowCounts FROM sys.tables t JOIN sys.dm_db_partition_stats s ON t.object_id = s.object_id LEFT JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1) WHERE s.index_id IN (0,1) GROUP BY t.NAME ORDER BY SizeMB DESC;

Запрос считает объём в мегабайтах по страницам данных (8 КБ на страницу) и показывает примерное число строк. Для кластерного индекса и кучи (index_id 0 и 1) страницы — это сами данные таблицы. Если нужен полный объём с учётом некластерных индексов, уберите фильтр по index_id и группируйте только по таблице.

Альтернатива без написания запросов: в SSMS правый клик по базе → «Отчёты» → «Стандартные отчёты» → «Использование диска по таблицам». Отчёт покажет те же данные в графическом виде, но на очень больших базах может формироваться заметное время.

Порядок получения размеров таблиц
  1. 1
    Откройте SSMS и подключитесь к серверу с базой 1С
  2. 2
    Выберите базу в выпадающем списке или выполните USE ИмяБазы
  3. 3
    Выполните запрос к sys.dm_db_partition_stats из этой статьи
  4. 4
    Отсортируйте результат по SizeMB и выпишите топ-10 таблиц
  5. 5
    Расшифруйте технические имена через структуру хранения 1С

Как расшифровать имена таблиц 1С

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

Практический вариант — выполнить небольшой фрагмент кода в консоли кода (внешняя обработка «Консоль кода» или аналогичная) и выгрузить результат в табличный документ:

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

// Выгрузить в таблицу значений и найти нужное имя СУБД

Также помогает знание префиксов: _Document — документы, _AccumRg — регистры накопления, _InfoRg — регистры сведений, _Catalog — справочники, _Acc — регистры бухгалтерии, _Reference — справочники в некоторых режимах совместимости. Суффиксы _ChangeRecorder указывают на таблицы регистрации изменений для обменов, которые нередко разрастаются до огромных размеров.

Чаще всего в топе по размеру оказываются регистры накопления по товарам и расчётам, таблица версий объектов и регистрация изменений для узлов обмена. Если обмен давно не используется, а регистрация изменений не очищена — эти таблицы могут занимать значительную долю базы.
ПЗ
Практическое замечание

Что делать с самыми большими таблицами

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

Если большой оказалась таблица регистрации изменений (*_ChangeRecorder), проверьте узлы планов обмена: возможно, изменения копятся для неактивного узла. Очистка выполняется удалением регистрации изменений в 1С, а не прямым удалением строк в SQL.

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

Проверка результата и типичные ошибки

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

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

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

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

SizeMB заметно снизился по сравнению с замером до

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

Размер не изменился — данные не удалены или таблица переписана заново

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

После shrink файла место появилось

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

Файл не уменьшился — внутри нет свободных страниц

Работа пользователей
Норма

Проверки целостности и отчёты формируются без ошибок

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

Ошибки ссылочной целостности — признак прямого вмешательства в SQL

Типичные ошибки
01
Судить о размере базы только по размеру MDF-файла — внутри может быть много пустого места, а реальные данные меньше
02
Удалять строки напрямую в SQL — нарушается целостность, база может перестать открываться в 1С
03
Искать размеры в файловой копии логики: у файловой базы 1Cv8.1CD структура другая, запросы SQL к ней неприменимы
04
Делать shrink после каждой чистки — регулярное сжатие фрагментирует индексы и ухудшает производительность

FAQ

Можно ли узнать размер таблиц без доступа к SQL Server?

Напрямую — нет. Из 1С доступна только структура хранения (соответствие имён), но не физические размеры. Косвенно оценить рост можно по размеру файлов базы в оснастке или по отчёту «Использование диска» в SSMS, если попросить администратора СУБД.

Чем отличается размер данных от размера файла базы?

Файл MDF резервирует место с запасом и не уменьшается после удаления данных. Размер таблиц — фактически занятые страницы. Разница между ними — свободное место внутри файла, которое SQL Server переиспользует под новые данные.

Какая таблица в 1С обычно самая большая?

Типичные лидеры — регистры накопления по товарам и взаиморасчётам, регистры сведений с частой записью, таблица версий объектов и таблицы регистрации изменений обменов. Точный ответ для конкретной базы даёт только запрос размеров.

Опасен ли запрос к sys.dm_db_partition_stats для рабочей базы?

Нет, это запрос на чтение к системным представлениям. Он не блокирует таблицы и не меняет данные, его можно выполнять в рабочее время.

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

Файловая база — это один файл 1Cv8.1CD, его размер виден в проводнике. Размеры отдельных таблиц внутри него штатными средствами не просматриваются; для анализа базу обычно временно разворачивают на SQL Server.

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

Достаточно периодического контроля раз в месяц или после массовых загрузок данных. Постоянный мониторинг имеет смысл при обменах с большими объёмами и при включённом версионировании объектов.

Итог

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

Размеры таблиц базы 1С получают запросом к sys.dm_db_partition_stats или процедурой sp_spaceused в SSMS. Имена таблиц расшифровывают через ПолучитьСтруктуруХраненияБазыДанных(). Сокращение данных выполняют только средствами 1С после резервного копирования, прямое удаление в SQL недопустимо.