Как проанализировать размер базы данных 1С 8.3 по объектам метаданных?

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

В процессе эксплуатации систем на платформе 1С:Предприятие 8.3 администраторы и разработчики часто сталкиваются с вопросом: почему база данных так быстро растет и какие именно объекты (документы, справочники или регистры) занимают основной объем дискового пространства? В этой статье мы подробно разберем, как с помощью программных средств платформы провести детальный аудит размера базы, выясним, почему для этого важна версия платформы не ниже 8.3.15, и рассмотрим особенности анализа для файлового и серверного вариантов работы.

Техническая основа: встроенные методы анализа

Долгое время получение точной информации о размере конкретных таблиц внутри 1С было нетривиальной задачей. Разработчикам приходилось либо писать прямые SQL-запросы к системным таблицам СУБД (в серверном варианте), либо пытаться разбирать структуру бинарного файла 1Cv8.1CD (в файловом варианте). Однако, начиная с версии платформы 8.3.15.1487, компания «1С» добавила штатные инструменты в язык программирования. Для автоматизации этого процесса вы можете использовать специальную обработку для расчета размера таблиц базы данных по метаданным.

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

  1. ПолучитьРазмерБазыДанных() — позволяет быстро узнать общий объем данных.
  2. ПолучитьРазмерыОбъектовМетаданных() — основной инструмент, который возвращает таблицу значений с детальной информацией по каждой таблице базы данных.

Проанализируем структуру данных, которую возвращает метод ПолучитьРазмерыОбъектовМетаданных(). После его вызова мы получаем таблицу со следующими колонками:

Разбор программной реализации анализатора

Для того чтобы создать отчет, который покажет нам «вес» каждого объекта, нам необходимо написать код, обходящий метаданные. Рассмотрим пример того, как это можно реализовать на стороне сервера:


&НаСервере
Функция СформироватьОтчетПоРазмерам() Экспорт
    
    // Проверяем возможность использования метода на текущей платформе
    Попытка
        ТаблицаРазмеров = ПолучитьРазмерыОбъектовМетаданных();
    Исключение
        Возврат "Метод не поддерживается данной версией платформы. Требуется 8.3.15 или выше.";
    КонецПопытки;
    
    // Сортируем таблицу по убыванию размера данных
    ТаблицаРазмеров.Сортировать("РазмерДанных УБЫВ");
    
    // В этом месте мы можем дополнительно обработать данные, 
    // например, перевести байты в мегабайты для удобства чтения
    Для Каждого Строка Из ТаблицаРазмеров Цикл
        Строка.РазмерДанных = Строка.РазмерДанных / (1024 * 1024); // Перевод в Мб
        Строка.РазмерИндексов = Строка.РазмерИндексов / (1024 * 1024);
    КонецЦикла;
    
    Возврат ТаблицаРазмеров;
    
КонецФункции

Используя этот подход, мы можем быстро построить отчет в виде диаграммы или сгруппированного списка, чтобы визуально определить «лидеров» по потреблению места.

Особенности файлового режима (1Cv8.1CD)

Проанализируем ситуацию, когда база работает в файловом режиме. Здесь есть важный нюанс: размер файла на диске почти всегда будет больше, чем сумма размеров всех объектов, которую покажет наша обработка. Выясним причину этого расхождения.

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

Чтобы реальный размер файла совпал с расчетным, мы рекомендуем выполнить следующие шаги:

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

Только после этой процедуры свободное место будет физически возвращено операционной системе.

Особенности серверного режима (SQL)

При работе с базами на MS SQL Server или PostgreSQL картина становится сложнее. Проанализируем, на что стоит обратить внимание системному администратору:

Размер индексов: В серверных базах индексы могут занимать до 50% и более от общего объема таблицы. Это плата за высокую скорость выборки данных. Если вы видите, что РазмерИндексов аномально велик, это повод задуматься о проведении корректной настройки регламентных операций MS SQL Server под 1С.

LOB-данные (Large Objects): Если ваша конфигурация хранит файлы, сканы или изображения непосредственно в базе (в реквизитах типа ХранилищеЗначения), то эти данные будут вынесены в отдельные структуры СУБД — в таком случае поможет перенос файлов и вложений из базы 1С в тома. В отчетах 1С они суммируются, но важно помнить, что именно они чаще всего являются причиной раздувания базы до терабайтных размеров.

Журнал транзакций: Важно понимать, что встроенные методы 1С ПолучитьРазмерБазыДанных() не учитывают размер файла лога транзакций (например, .LDF в SQL). Платформа анализирует только логическую структуру данных, доступную ей как приложению.

Практические советы по оптимизации

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

Альтернативные способы анализа

Если по каким-то причинам вы не можете использовать программные методы (например, версия платформы ниже 8.3.15), рассмотрим альтернативы:

Для файловых баз незаменимым инструментом остается утилита Tool_1CD. Она позволяет просмотреть структуру базы даже без запуска самой платформы 1С и увидеть размер каждой таблицы «как есть» на диске.

Для серверных баз наиболее точную информацию дадут стандартные отчеты СУБД. Например, в SQL Server Management Studio (SSMS) можно нажать правой кнопкой на базу данных и выбрать Reports -> Standard Reports -> Disk Usage by Top Tables. Этот отчет покажет не только размер данных и индексов, но и неиспользуемое зарезервированное пространство внутри каждой таблицы.

Подводя итог, отметим, что регулярный мониторинг размера базы данных — это залог стабильной работы системы. Используя встроенные методы 1С, мы можем автоматизировать этот процесс, создав регламентное задание, которое будет уведомлять администратора при резком росте конкретных таблиц, что позволит предотвратить проблемы с нехваткой места на сервере еще до их возникновения.

← На главную