Работа с большими базами данных в 1С:Предприятие часто требует контроля за объемом хранимых данных. Один из ключевых вопросов — как узнать размер таблиц в базе 1С, чтобы оптимизировать производительность, выявить "раздутые" объекты или спланировать миграцию. Эта задача актуальна как для администраторов, так и для разработчиков, которые сталкиваются с замедлением работы системы или необходимостью архивирования.

В зависимости от конфигурации (файловый или клиент-серверный режим) и используемой СУБД (Microsoft SQL Server, PostgreSQL), методы анализа размера таблиц будут отличаться. В этой статье мы разберем пять проверенных способов, включая SQL-запросы, встроенные отчеты 1С и сторонние утилиты, с учетом особенностей разных версий платформы (8.3 и выше).

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

1. Почему важно контролировать размер таблиц в 1С

На первый взгляд, мониторинг объема таблиц может показаться рутинной задачей, но на практике он решает несколько критичных проблем:

  • 📉 Производительность: таблицы с миллионами записей (например, Document1000 или AccumulationRegister1234) замедляют выполнение запросов и регламентных операций. Анализ помогает выявить "узкие места" до того, как пользователи начнут жаловаться на тормоза.
  • 💾 Хранение: в облачных или виртуализированных средах объем базы данных напрямую влияет на стоимость инфраструктуры. Например, в MS Azure SQL тарификация зависит от занимаемого пространства.
  • 🔄 Обновления и миграции: перед переходом на новую версию 1С или переносом базы на другой сервер необходимо оценить объем данных, чтобы спланировать время простоя и ресурсы.
  • 🛠️ Диагностика ошибок: некоторые сбои (например, Timeout expired или Недостаточно памяти) связаны с переполнением таблиц. Их размер — первый индикатор для поиска причины.

По данным исследований, в 70% случаев замедления работы 1С виноваты именно перегруженные таблицы регистров накопления или документов. При этом даже стандартные отчеты платформы (например, "Анализ использования дискового пространства") не всегда дают полную картину, особенно если база работает на PostgreSQL или использует нетипичные настройки хранения.

📊 Какую СУБД вы используете для 1С?
Microsoft SQL Server
PostgreSQL
Файловый режим (без СУБД)
Другую

2. Способ 1: SQL-запросы для Microsoft SQL Server

Если ваша база 1С работает на MS SQL Server, самый точный способ узнать размер таблиц — использовать системные представления. Ниже приведены запросы, адаптированные под структуру баз 1С, где имена таблиц часто содержат префиксы вроде _1S или v8.

2.1. Запрос для оценки размера всех таблиц

Этот скрипт вернет список таблиц с указанием:

  • 📊 Общего размера (включая индексы).
  • 📄 Количества строк.
  • 📈 Занятого пространства (в МБ).
SELECT

t.NAME AS TableName,

s.Name AS SchemaName,

p.rows AS RowCounts,

SUM(a.total_pages) * 8 AS TotalSpaceKB,

CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,

CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,

CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB

FROM

sys.tables t

INNER JOIN

sys.indexes i ON t.OBJECT_ID = i.object_id

INNER JOIN

sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id

INNER JOIN

sys.allocation_units a ON p.partition_id = a.container_id

LEFT OUTER JOIN

sys.schemas s ON t.schema_id = s.schema_id

WHERE

t.is_ms_shipped = 0

AND t.NAME NOT LIKE 'dt%'

AND t.NAME NOT LIKE 'sys%'

AND t.NAME NOT LIKE 'queue%'

GROUP BY

t.Name, s.Name, p.Rows

ORDER BY

TotalSpaceMB DESC;

Обратите внимание на фильтры t.NAME NOT LIKE 'dt%' — они исключают служебные таблицы 1С (например, dtProperties), которые не несут полезной нагрузки для анализа. Результаты отсортированы по убыванию размера, чтобы сразу увидеть самые "тяжелые" таблицы.

2.2. Запрос для конкретной таблицы

Если нужно проверить размер конкретной таблицы (например, Document1000), используйте модифицированный запрос:

EXEC sp_spaceused 'dbo._Document1000';

Эта хранимая процедура вернет:

  • 📏 name — имя таблицы.
  • 📏 rows — количество строк.
  • 📏 reserved — зарезервированное пространство (в КБ).
  • 📏 data — пространство, занятое данными.
  • 📏 index_size — размер индексов.
  • 📏 unused — неиспользуемое пространство.
💡

Если имя таблицы содержит префикс схемы (например, v81.), укажите его явно: EXEC sp_spaceused 'v81._Document1000';. В базах 1С 8.3 часто используется схема v81 или dbo.

2.3. Анализ фрагментации индексов

Размер таблицы — не единственный показатель производительности. Фрагментация индексов может замедлять запросы даже при небольшом объеме данных. Чтобы проверить ее уровень, выполните:

SELECT

OBJECT_NAME(ind.OBJECT_ID) AS TableName,

ind.name AS IndexName,

indexstats.avg_fragmentation_in_percent

FROM

sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') indexstats

INNER JOIN

sys.indexes ind ON ind.object_id = indexstats.object_id AND ind.index_id = indexstats.index_id

WHERE

indexstats.avg_fragmentation_in_percent > 10 -- Порог фрагментации

AND OBJECT_NAME(ind.OBJECT_ID) LIKE '_%' -- Фильтр по таблицам 1С

ORDER BY

indexstats.avg_fragmentation_in_percent DESC;

Если значение avg_fragmentation_in_percent превышает 30%, рекомендуется выполнить реорганизацию или перестроение индекса:

ALTER INDEX [IndexName] ON [Schema].[TableName] REORGANIZE;
💡

Фрагментация выше 30% может увеличивать время выполнения запросов в 2–3 раза, особенно на таблицах с частыми вставками/удалением данных (например, регистры накопления).

3. Способ 2: Анализ для PostgreSQL

Если ваша база 1С работает на PostgreSQL, синтаксис запросов будет иным. Здесь используются системные каталоги pg_class, pg_namespace и pg_total_relation_size.

3.1. Запрос для всех таблиц

SELECT

nspname AS SchemaName,

relname AS TableName,

pg_size_pretty(pg_total_relation_size(relid)) AS TotalSize,

pg_size_pretty(pg_relation_size(relid)) AS DataSize,

pg_size_pretty(pg_indexes_size(relid)) AS IndexesSize,

n_live_tup AS LiveRows

FROM

pg_class C

LEFT JOIN

pg_namespace N ON (N.oid = C.relnamespace)

WHERE

relkind = 'r' -- Только обычные таблицы

AND nspname NOT IN ('pg_catalog', 'information_schema') -- Исключаем системные схемы

AND relname LIKE '_%' -- Фильтр по таблицам 1С

ORDER BY

pg_total_relation_size(relid) DESC;

Функция pg_size_pretty автоматически преобразует байты в читаемый формат (КБ, МБ, ГБ). Обратите внимание на колонку LiveRows — она показывает количество активных строк, что полезно для оценки "мертвого груза" после массовых удалений.

3.2. Детализация по таблице

Для анализа конкретной таблицы (например, _AccumRg1234) используйте:

SELECT

pg_size_pretty(pg_total_relation_size('"_AccumRg1234"')) AS TotalSize,

pg_size_pretty(pg_relation_size('"_AccumRg1234"')) AS DataSize,

pg_size_pretty(pg_indexes_size('"_AccumRg1234"')) AS IndexesSize;

В PostgreSQL имена таблиц 1С часто заключены в двойные кавычки (например, "_Document1000"), так как содержат символы, недопустимые без экранирования.

Убедитесь, что у вас есть права на чтение системных каталогов|Проверьте версию PostgreSQL (в 9.x и 10.x синтаксис может отличаться)|Используйте \dt в psql для просмотра списка таблиц|Создайте резервную копию перед массовыми операциями с индексами-->

4. Способ 3: Встроенные инструменты 1С

Не всегда есть доступ к SQL-серверу, особенно в облачных решениях или при работе через 1С:Fresh. В таких случаях можно использовать встроенные механизмы платформы.

4.1. Отчет "Анализ использования дискового пространства"

Этот отчет доступен в конфигураторе:

  1. Откройте конфигуратор 1С в режиме Администратор.
  2. Перейдите в меню Администрирование → Поддержка и обслуживание → Анализ использования дискового пространства.
  3. Выберите базу данных и нажмите Выполнить анализ.

Отчет покажет:

  • 📊 Размер таблиц в базах данных (для клиент-серверного варианта).
  • 📁 Размер файлов .1CD (для файлового варианта).
  • 🗃️ Статистику по объектам метаданных (документы, справочники, регистры).

Минус метода — отсутствие детализации по индексам и невозможность экспорта данных для дальнейшего анализа. Однако это единственный способ для пользователей без доступа к SQL.

4.2. Тестирование и исправление (chdbfl.exe)

Утилита chdbfl.exe (входит в комплект поставки 1С) позволяет проверить целостность базы и получить информацию о размере файлов. Для файлового варианта выполните:

chdbfl.exe /F "C:\Bases\YourBase.1CD" /L "C:\Temp\report.txt"

В отчете (report.txt) будет строка Database size с общим объемом базы. Для клиент-серверного варианта утилита покажет размеры табличных пространств.

Что делать, если chdbfl.exe не находит базу?

Убедитесь, что путь к файлу .1CD указан корректно и база не заблокирована другими сессиями. Если утилита выдает ошибку Файл поврежден, попробуйте запустить ее с ключом /R для восстановления: chdbfl.exe /F "base.1CD" /R.

5. Способ 4: Сторонние утилиты

Для углубленного анализа можно использовать специализированные инструменты:

Утилита Поддерживаемые СУБД Функциональность Ссылка (поиск)
SQL Server Management Studio (SSMS) MS SQL Визуальный анализ размеров, фрагментации, генерация отчетов Официальный сайт Microsoft
pgAdmin PostgreSQL Детализация по таблицам, индексам, визуализация занятого пространства pgadmin.org
1C:Администратор сервера Любые (через RAS) Мониторинг производительности, анализ блокировок, размеров временных таблиц Входит в дистрибутив 1С
DBVisualizer MS SQL, PostgreSQL, Oracle Кросс-платформенный инструмент с поддержкой кастомных запросов dbvis.com

Для MS SQL особенно полезен встроенный в SSMS отчет Disk Usage by Table (доступен через контекстное меню базы данных → Reports → Standard Reports). Он визуализирует распределение пространства по таблицам в виде диаграммы.

💡

В pgAdmin для быстрого анализа используйте контекстное меню таблицы → Properties → Statistics. Здесь отображается размер, количество строк и последняя дата анализа статистики.

6. Способ 5: Анализ в файловом режиме

Если база 1С работает в файловом режиме (без СУБД), размер таблиц определяется косвенно — через анализ файла .1CD. Здесь поможет:

6.1. Утилита 1Cv8.epf (внешняя обработка)

Многие администраторы используют внешние обработки, например, "Анализ базы данных" от Инфостарт. Она позволяет:

  • 📊 Посмотреть размеры логических таблиц (документов, справочников).
  • 🔍 Выявить "мертвые" ссылки и неиспользуемые объекты.
  • 📈 Построить графики роста базы по датам.

Скачать обработку можно на порталах Инфостарт или 1С:ИТС (требуется подписка). После загрузки:

  1. Откройте 1С в режиме Конфигуратор.
  2. Перейдите в Файл → Открыть → Внешняя обработка.
  3. Выберите скачанный файл .epf и запустите анализ.

6.2. Ручное измерение файла .1CD

Простейший способ — проверить размер файла базы в проводнике Windows. Однако это покажет общий объем, а не размеры отдельных таблиц. Для детализации:

  1. Создайте резервную копию базы (.dt).
  2. Откройте файл .dt в текстовом редакторе (например, Notepad++) и найдите блоки с именами таблиц (например, {Document1000}).
  3. Оцените размер блоков вручную (требует опыта).

Этот метод подходит только для небольших баз и опытных пользователей, так как структура .1CD не документирована и может меняться между версиями платформы.

💡

В файловом режиме точный анализ размеров таблиц невозможен без специализированных инструментов. Ориентируйтесь на общий размер базы и регулярно выполняйте архивацию.

7. Типичные ошибки и как их избежать

При анализе размеров таблиц в 1С даже опытные администраторы допускают ошибки. Вот самые распространенные:

  • Игнорирование временных таблиц: запросы 1С часто создают временные таблицы с префиксом # или @, которые занимают место. Их нужно учитывать отдельно:
    SELECT * FROM tempdb.sys.tables;
  • Путаница между reserved и used: в MS SQL reserved — это зарезервированное пространство, а used — фактически занятое. Разница показывает фрагментацию.
  • Анализ без учета транзакций: если в базе есть незафиксированные транзакции, размер таблиц может быть занижен. Перед анализом выполните:
    CHECKPOINT;
  • Использование устаревших скриптов: в PostgreSQL 12+ изменилась структура системных каталогов. Всегда проверяйте совместимость запросов с вашей версией СУБД.

Еще одна частая проблема — неверная интерпретация результатов. Например, большая таблица _AccumRg1234 не всегда означает, что ее нужно чистить. Возможно, это рабочая нагрузка (например, регистр остатков товаров). Всегда сверяйте размеры с бизнес-логикой!

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

Сравните темпы роста таблицы за последние месяцы (используйте исторические данные из мониторинга). Если объем вырос в 2+ раза без объективных причин (например, сезонный рост данных), это повод для анализа. Также проверьте, есть ли на таблицу жалобы пользователей на медленные отчеты.

8. Практические рекомендации по оптимизации

Выявив крупные таблицы, приступайте к оптимизации. Вот проверенные методы:

8.1. Архивация старых данных

Для документов и регистров с историей более 3–5 лет:

  • 🗃️ Настройте регламентное задание по архивации (например, через ВыгрузкаДанныхXML).
  • 📂 Перенесите данные в отдельную базу или внешний архив.
  • 🔄 Используйте механизм Планы обмена для синхронизации актуальных данных.

8.2. Перестроение индексов

Для таблиц с высокой фрагментацией (>30%):

-- Для MS SQL:

ALTER INDEX ALL ON [Schema].[TableName] REBUILD;

-- Для PostgreSQL:

REINDEX TABLE "_TableName";

Эту операцию лучше выполнять в нерабочее время, так как она блокирует таблицу.

8.3. Очистка "мусора"

В 1С накапливаются временные данные, которые не удаляются автоматически:

  • 🧹 Очистите таблицу _SessionParams (хранит параметры сессий).
  • 🗑️ Удалите устаревшие записи из _DeadLock и _JobLog.
  • 📋 Проверьте регистры сведений на наличие дублей (используйте отчет Поиск дублей).

Для массовой очистки используйте скрипт:

DELETE FROM "_SessionParams" WHERE "SessionID" NOT IN (

SELECT "SessionID" FROM "_Sessions" WHERE "Active" = 1

);

💡

Перед массовым удалением данных всегда делайте резервную копию! В 1С для этого подходит утилита 1Cv8.exe /D"BasePath" /DumpIB "Backup.1CD".

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

❓ Как узнать размер таблицы в 1С 8.3, если нет доступа к SQL?

Используйте встроенный отчет Анализ использования дискового пространства в конфигураторе (меню Администрирование → Поддержка и обслуживание). Для файлового режима подойдет утилита chdbfl.exe или внешние обработки (например, с Инфостарта).

❓ Почему размер таблицы в SQL и 1С отличается?

В SQL показывается физический размер (включая индексы и служебные данные), а в 1С — логический (только полезная нагрузка). Разница может достигать 30–50% за счет:

  • Индексов (занимают ~20–40% от размера таблицы).
  • Фрагментации (неиспользуемое пространство после удаления строк).
  • Служебных полей (например, _IDRRef, _Marked).
❓ Можно ли уменьшить размер таблицы без потери данных?

Да, несколько способов:

  1. Реорганизация индексов (не блокирует таблицу): ALTER INDEX REORGANIZE.
  2. Сжатие данных (в MS SQL): ALTER TABLE [TableName] REBUILD WITH (DATA_COMPRESSION = PAGE).
  3. Очистка истории: удаление устаревших записей из регистров накопления.

Сжатие может сократить объем на 40–60%, но требует тестирования на производительность (иногда замедляет запросы).

❓ Как автоматизировать мониторинг размеров таблиц?

Настройте:

  • 📅 Регламентное задание в 1С с вызовом внешней обработки анализа.
  • 🤖 SQL Agent (для MS SQL) с еженедельным выполнением скрипта и отправкой отчета на email.
  • 📊 Grafana + Prometheus для визуализации трендов роста таблиц.

Пример скрипта для автоматического сбора данных:

-- Сохраняем результаты в таблицу для истории

INSERT INTO [dbo].[TableSizeHistory] ([TableName], [SizeMB], [Date])

SELECT

t.NAME AS TableName,

CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS SizeMB,

GETDATE() AS Date

FROM sys.tables t

-- ... (остальная часть запроса из раздела 2.1)

WHERE t.NAME LIKE '_%';

❓ Какие таблицы в 1С обычно занимают больше всего места?

Топ-5 "тяжелых" таблиц в типичных конфигурациях:

  1. _AccumRg{Номер} — регистры накопления (остатки, обороты).
  2. _Document{Номер} — документы с большим количеством движений.
  3. _InformationRegister{Номер} — регистры сведений с историей.
  4. _ChartOfAccounts — план счетов (если ведется аналитика по субконто).
  5. _Catalog{Номер} — справочники с большим количеством реквизитов (например, номенклатура).

В торговле лидерами часто становятся _DocumentСчетФактураВыданный и _AccumRgТоварыНаСкладах.