В процессе администрирования и оптимизации файловых баз 1С (файл 1Cv8.1CD) нередко возникает потребность узнать точный размер конкретных таблиц. Это критически важно при приближении к техническим лимитам файлового формата или при внезапном разрастании базы данных. Разберем, как устроена файловая база изнутри, какими штатными и сторонними средствами можно проанализировать размер каждой таблицы, и как устранить разрастание данных.
Прежде чем приступать к анализу, выясним внутреннее устройство файловой базы. Каждая таблица метаданных в файле 1Cv8.1CD физически делится платформой на три самостоятельных потока (блока данных):
ХранилищеЗначения.В классическом формате файловой базы со страницей 4 КБ ограничение в 4 ГБ действует не на весь файл целиком, а отдельно на каждый из этих трех потоков для каждой таблицы. Начиная с платформы 8.3.8 поддерживается расширенный формат со страницами от 8 до 64 КБ, однако контроль объема отдельных таблиц остается важной задачей мониторинга.
Начиная с версии платформы 8.3.15, доступен встроенный метод глобального контекста ПолучитьРазмерДанныхБазыДанных(). Он позволяет программно получить объем данных по объектам конфигурации без применения сторонних утилит.
Посмотрим на пример кода для оценки размеров прикладных объектов:
ПараметрыАнализа = Новый Массив;
Для Каждого ДокументМетаданных Из Метаданные.Документы Цикл
ПараметрыАнализа.Добавить(ДокументМетаданных);
КонецЦикла;
Результат = ПолучитьРазмерДанныхБазыДанных(ПараметрыАнализа);
Для Каждого Стр Из Результат Цикл
Сообщить("Объект: " + Стр.Объект + " | Размер: " + Окр(Стр.Размер / (1024 * 1024), 2) + " МБ");
КонецЦикла;
Важное ограничение метода: он оценивает логический объем хранимых прикладных данных, но не учитывает размер таблиц индексов и служебных структур СУБД, а также может требовать длительного времени на выполнение при большом объеме базы.
Для детального анализа физического распределения страниц в файле 1Cv8.1CD рассмотрим проверенные инструменты разработчиков:
1Cv8.1CD без запуска платформы 1С и увидеть полный список физических таблиц, количество записей и распределение страниц между полями, индексами и BLOB-блоками.Если требуется максимально точный анализ распределения пространства на уровне СУБД, применим классический инженерный подход:
.dt через режим Конфигуратора (меню Администрирование > Выгрузить информационную базу)..dt.sp_spaceused или откроем стандартный отчет Disk Usage by Top Tables в среде SQL Server Management Studio (SSMS).Такой способ позволяет детально увидеть объем данных (data), объем индексов (index_size) и неиспользуемое зарезервированное пространство (unused) для каждой таблицы.
Проанализируем частую проблему: почему размер файла базы данных не уменьшается даже после удаления большого количества записей? При удалении или изменении данных в 1С (особенно в полях неограниченной длины) освобожденные страницы файла не возвращаются операционной системе, а помечаются как свободные внутри структуры базы для последующей записи новых данных. Это приводит к сильной фрагментации.
Для физического освобождения места и пересборки структуры таблиц выполним следующие шаги:
.dt, создать новую чистую файловую базу и загрузить файл обратно. При загрузке файл 1Cv8.1CD формируется заново без фрагментации.