Администрирование · 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 возвращает все таблицы с сортировкой по занимаемому месту. Он безопасен, выполняется быстро даже на больших базах и не блокирует работу пользователей.
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Откройте SSMS и подключитесь к серверу с базой 1С
- 2Выберите базу в выпадающем списке или выполните USE ИмяБазы
- 3Выполните запрос к sys.dm_db_partition_stats из этой статьи
- 4Отсортируйте результат по SizeMB и выпишите топ-10 таблиц
- 5Расшифруйте технические имена через структуру хранения 1С
Как расшифровать имена таблиц 1С
Получив список вида _AccumRg2514, нужно понять, какому объекту конфигурации он соответствует. Для этого в 1С есть функция встроенного языка ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает таблицу соответствия: имя объекта метаданных, назначение и имя таблицы в СУБД.
Практический вариант — выполнить небольшой фрагмент кода в консоли кода (внешняя обработка «Консоль кода» или аналогичная) и выгрузить результат в табличный документ:
Структура = ПолучитьСтруктуруХраненияБазыДанных();
// Выгрузить в таблицу значений и найти нужное имя СУБД
Также помогает знание префиксов: _Document — документы, _AccumRg — регистры накопления, _InfoRg — регистры сведений, _Catalog — справочники, _Acc — регистры бухгалтерии, _Reference — справочники в некоторых режимах совместимости. Суффиксы _ChangeRecorder указывают на таблицы регистрации изменений для обменов, которые нередко разрастаются до огромных размеров.
Чаще всего в топе по размеру оказываются регистры накопления по товарам и расчётам, таблица версий объектов и регистрация изменений для узлов обмена. Если обмен давно не используется, а регистрация изменений не очищена — эти таблицы могут занимать значительную долю базы.
Что делать с самыми большими таблицами
Найденная большая таблица — ещё не повод что-то удалять. Сначала определите её природу: если это регистр накопления с реальными движениями за много лет, уменьшить его можно только свёрткой базы или переносом старых периодов в архивную копию. Штатная свёртка выполняется специализированной обработкой и требует тестирования на копии.
Если большой оказалась таблица регистрации изменений (*_ChangeRecorder), проверьте узлы планов обмена: возможно, изменения копятся для неактивного узла. Очистка выполняется удалением регистрации изменений в 1С, а не прямым удалением строк в SQL.
Таблица версий объектов (при включённом хранении истории данных) сокращается настройкой сроков хранения версий в параметрах информационной базы. Журнал регистрации хранится отдельно от таблиц SQL-данных и уменьшается через сокращение журнала в конфигураторе.
Проверка результата и типичные ошибки
После любой чистки повторите запрос размеров и сравните цифры до и после. Учтите: освобождённое внутри файла место не вернётся на диск автоматически — для этого нужен shrink файла, который рекомендуется делать осознанно и не регулярно, так как он вызывает фрагментацию индексов.
Как проверить результат
SizeMB заметно снизился по сравнению с замером до
Размер не изменился — данные не удалены или таблица переписана заново
После shrink файла место появилось
Файл не уменьшился — внутри нет свободных страниц
Проверки целостности и отчёты формируются без ошибок
Ошибки ссылочной целостности — признак прямого вмешательства в SQL
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 недопустимо.