Как определить размер таблиц 1С 8.3 в SQL-базе и сопоставить их с объектами конфигурации

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Рано или поздно любой администратор или разработчик 1С сталкивается с проблемой стремительного роста базы данных. Когда дисковое пространство начинает таять, возникает закономерный вопрос: какие именно таблицы занимают больше всего места? Сложность заключается в том, что в СУБД (будь то MS SQL Server или PostgreSQL) таблицы 1С имеют технические имена вида _InfoRg1234 или _Document56, которые мало о чем говорят обычному пользователю. В этой статье мы разберем по шагам, как получить детальную статистику по размерам таблиц и перевести эти данные на «человеческий» язык 1С.

Метод 1: Прямой запрос к MS SQL Server

Если ваша база данных работает под управлением Microsoft SQL Server, мы можем получить самую точную информацию о физическом размере данных и индексов напрямую через консоль SQL Server Management Studio (SSMS). Рассмотрим запрос, который собирает данные из системных представлений и выводит количество строк, общий объем, занятое и свободное место для каждой таблицы.

Для выполнения этого анализа откройте SSMS, выберите вашу базу данных и выполните следующий скрипт:


SELECT 
    t.NAME AS TableName,
    s.Name AS SchemaName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
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.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    TotalSpaceKB DESC

Проанализируем результаты выполнения этого запроса. Колонка TotalSpaceKB покажет нам полный объем, который таблица резервирует на диске. Важно помнить, что 1С активно использует индексы, и зачастую именно они (разница между TotalSpaceKB и UsedSpaceKB для данных) занимают значительную часть места. Если вы видите аномально большие значения в индексах, возможно, базе требуется реиндексация или пересмотр структуры метаданных.

Метод 2: Сопоставление имен SQL с объектами 1С

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

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


ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаСтруктуры Из ТаблицаСтруктуры Цикл
    Сообщить("Объект: " + СтрокаСтруктуры.ИмяТаблицы + " -> Таблица в SQL: " + СтрокаСтруктуры.ИмяТаблицыХранения);
КонецЦикла;

Эта функция возвращает таблицу значений, содержащую информацию обо всех таблицах базы данных, включая таблицы итогов, индексы и вспомогательные структуры. На основе этих данных можно создать полноценный отчет, который соединит данные из SQL-запроса (Метод 1) и имена объектов метаданных. Вместо написания такого отчёта можно попробовать обработку обследования базы: она сопоставляет таблицы с объектами после загрузки SQL-статистики. Запрос для MS SQL и работа на 8.3 автором не проверялись.

Метод 3: Использование встроенных инструментов БСП

Если вы работаете в современной конфигурации (например, УТ 11, ERP 2, БП 3.0), которая построена на базе Библиотеки стандартных подсистем (БСП), вам не обязательно писать запросы или использовать внешние обработки. В составе БСП уже есть готовые механизмы для анализа.

Разберем, где их найти:

  1. Перейдите в раздел Администрирование — Обслуживание.
  2. Откройте подраздел Отчеты администратора.
  3. Найдите отчет Анализ длительности операций или напрямую Размер таблиц базы данных (название может варьироваться в зависимости от версии БСП).

Этот отчет автоматически выполняет запросы к СУБД и сопоставляет их с объектами метаданных, выводя удобный список с названиями справочников и документов. Важный момент: для работы этого отчета у пользователя 1С, под которым он запускается, могут потребоваться права на просмотр динамических представлений в самом SQL-сервере.

Метод 4: Анализ хранения файлов

Часто основной объем базы занимают не записи в документах, а присоединенные файлы (сканы, PDF, картинки). Посмотрим на ситуацию глубже: в современных конфигурациях файлы хранятся не в одной общей таблице, а распределены по справочникам вида ПрисоединенныеФайлы для каждого типа объекта.

Проанализируем механизм хранения:

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

Метод 5: Особенности для СУБД PostgreSQL

Если ваша 1С работает на Linux с СУБД PostgreSQL, синтаксис запросов будет отличаться. Для получения размеров таблиц в этой среде мы будем использовать системные функции pg_relation_size и pg_total_relation_size.

Рассмотрим пример запроса для Postgres:


SELECT
    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_total_relation_size(relid) - pg_relation_size(relid)) AS IndexSize
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

Этот запрос выведет список таблиц, отсортированный по убыванию общего объема (включая индексы), в удобном для чтения формате (Мб, Гб).

Рекомендации по оптимизации

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

  1. Версионирование объектов: Проверьте, не переполнен ли регистр сведений, хранящий истории изменений. Часто именно он занимает до 50% базы. Настройте регламент очистки старых версий.
  2. Таблицы регистрации изменений: Если у вас настроены планы обмена, проверьте таблицы с префиксом _Chng. Если обмен с каким-то узлом давно не выполнялся, регистрация изменений будет расти бесконечно.
  3. Итоги регистров: Иногда таблицы итогов (особенно в старых базах) могут содержать избыточные данные. Выполнение процедуры Пересчет итогов через Тестирование и исправление может помочь оптимизировать их размер.
  4. Сжатие (Shrink): Помните, что простое удаление данных в 1С не уменьшает физический размер файла базы на диске. Чтобы вернуть место операционной системе в MS SQL, необходимо выполнить операцию Shrink, однако делайте это осторожно, так как она вызывает сильную фрагментацию индексов. После сжатия обязательно выполните перестроение индексов (Rebuild).

Таким образом, комбинируя прямые SQL-запросы для получения технических данных и механизмы платформы 1С для их интерпретации, мы получаем полный контроль над объемом нашей информационной системы.

← На главную