Нередко возникает парадоксальная ситуация: после удаления значительного объема данных из файловой базы 1С (например, документов и справочников по целой организации) ее размер в виде файла *.1CD не только не уменьшается, но и может даже увеличиться. Стандартная процедура «Тестирование и исправление» со сжатием таблиц тоже не всегда помогает. Разберемся, почему так происходит и какие методы помогут эффективно сжать базу данных.
Основная причина кроется в механизме работы файловой СУБД, используемой платформой 1С. Когда вы удаляете объекты, данные физически не стираются из файла *.1CD. Вместо этого, занимаемое ими пространство помечается как свободное. Система сможет использовать его для записи новых данных в будущем. Это похоже на удаление файла в корзину — место на диске освободится только после ее очистки. Увеличение же размера может быть связано с ростом журнала транзакций, ведь каждая операция удаления — это тоже транзакция, которая записывается в служебные таблицы.
Рассмотрим несколько проверенных способов, которые помогут навести порядок и реально уменьшить размер информационной базы.
Это самый надежный и рекомендуемый способ для «очистки» файловой базы. Его суть заключается в создании архивной копии, которая содержит только актуальные данные, без «мусора», неиспользуемого пространства и записей, помеченных на удаление. Последующая загрузка из этого архива создает файл базы данных с нуля.
1Cv8.1CD в надежное место.*.dt.*.dt файл.После завершения загрузки новый файл 1Cv8.1CD будет содержать только нужные данные и, как правило, будет значительно меньше исходного.
Важный момент: если после выгрузки размер самого *.dt файла практически не уменьшился, это тревожный сигнал. Он означает, что проблема не в «пустом пространстве», а в том, что какие-то данные не были удалены или разрослись служебные регистры (например, версионирования объектов, журнала регистрации и т.п.). В этом случае нужно переходить к более глубокому анализу.
Иногда корректному сжатию базы могут мешать ошибки на физическом уровне структуры файла *.1CD. Для их поиска и исправления в комплекте с платформой 1С поставляется специальная утилита chdbfl.exe.
Разберем по шагам, как ей воспользоваться:
bin каталога, где установлена платформа 1С. Например: C:\Program Files\1cv8\8.3.25.1546\bin\chdbfl.exe.chdbfl.exe. В поле «Имя файла БД» укажите путь к вашему файлу 1Cv8.1CD.После того как утилита завершит работу, рекомендуется снова зайти в Конфигуратор и выполнить «Тестирование и исправление» с опцией «Сжатие таблиц информационной базы». Комплексное применение этих двух инструментов часто дает положительный результат.
Если предыдущие методы не помогли и размер *.dt файла остается неоправданно большим, значит, причина в самих данных. Чтобы понять, что именно занимает место, можно временно перенести базу на SQL-сервер. Это мощный диагностический инструмент, который позволяет заглянуть «под капот» базы данных.
Процесс состоит из нескольких этапов:
*.dt.Выполните следующий скрипт в среде SQL Server Management Studio, предварительно выбрав вашу базу данных:
USE [ИМЯ_ВАШЕЙ_БАЗЫ];
IF OBJECT_ID('tempdb..#result', 'U') IS NOT NULL
DROP TABLE #result;
CREATE TABLE #result (
ID INT IDENTITY(1, 1)
, name NVARCHAR(255)
, rows BIGINT
, reserved NVARCHAR(255)
, data NVARCHAR(255)
, index_size NVARCHAR(255)
, unused NVARCHAR(255)
)
DECLARE @SQL NVARCHAR(MAX) = '';
SELECT @SQL+='EXEC sp_spaceused '''+S.name+'.'+T.name+''';'
FROM sys.tables AS T
INNER JOIN sys.schemas AS S ON S.schema_id=T.schema_id
INSERT INTO #result
EXEC (@SQL);
SELECT *
FROM #result
ORDER BY rows DESC
Результат этого запроса покажет список всех таблиц базы, отсортированный по количеству записей (rows) в порядке убывания. Проанализируйте топ списка — возможно, вы увидите там таблицы, которые не должны быть такими большими, что натолкнет на дальнейшие мысли по очистке данных.
*.dt. После анализа и сжатия на стороне SQL выгрузите базу обратно в *.dt файл и разверните его в файловом варианте.Важно понимать: этот метод является в первую очередь диагностическим. Если после анализа выяснилось, что огромный размер имеет таблица данных, которую вы считали удаленной, значит, процесс удаления прошел некорректно, и нужно возвращаться к методологии очистки данных в 1С.
В заключение, проблема несжимаемой базы — распространенное явление. Начинать решение всегда стоит с самого простого и безопасного метода — выгрузки/загрузки через *.dt. Если он не помогает, значит, проблема глубже и требует более детального анализа с помощью утилиты chdbfl.exe или даже временного переноса в SQL-среду.