Почему база 1С не уменьшается после удаления данных и как ее сжать?

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

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

Основная причина кроется в механизме работы файловой СУБД, используемой платформой 1С. Когда вы удаляете объекты, данные физически не стираются из файла *.1CD. Вместо этого, занимаемое ими пространство помечается как свободное. Система сможет использовать его для записи новых данных в будущем. Это похоже на удаление файла в корзину — место на диске освободится только после ее очистки. Увеличение же размера может быть связано с ростом журнала транзакций, ведь каждая операция удаления — это тоже транзакция, которая записывается в служебные таблицы.

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

Метод 1: Выгрузка и загрузка информационной базы (*.dt)

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

  1. Создайте резервную копию. Это обязательный шаг перед любыми манипуляциями с базой данных. Скопируйте файл 1Cv8.1CD в надежное место.
  2. Запустите 1С в режиме «Конфигуратор».
  3. Выгрузите информационную базу. Перейдите в меню «Администрирование» → «Выгрузить информационную базу...» и сохраните файл с расширением *.dt.
  4. Создайте новую пустую базу данных. В окне запуска 1С нажмите «Добавить», выберите «Создание новой информационной базы» и пройдите шаги мастера, создав базу без конфигурации.
  5. Загрузите данные в новую базу. Запустите созданную пустую базу в режиме «Конфигуратор», перейдите в меню «Администрирование» → «Загрузить информационную базу...» и выберите созданный ранее *.dt файл.

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

Важный момент: если после выгрузки размер самого *.dt файла практически не уменьшился, это тревожный сигнал. Он означает, что проблема не в «пустом пространстве», а в том, что какие-то данные не были удалены или разрослись служебные регистры (например, версионирования объектов, журнала регистрации и т.п.). В этом случае нужно переходить к более глубокому анализу.

Метод 2: Проверка физической целостности (chdbfl.exe)

Иногда корректному сжатию базы могут мешать ошибки на физическом уровне структуры файла *.1CD. Для их поиска и исправления в комплекте с платформой 1С поставляется специальная утилита chdbfl.exe.

Разберем по шагам, как ей воспользоваться:

  1. Обязательно сделайте резервную копию базы! Работа утилиты вносит изменения непосредственно в файл базы, и в случае сбоя вы можете потерять данные.
  2. Закройте все сеансы работы с базой. Никто не должен быть подключен к ней ни в режиме Предприятия, ни в Конфигураторе.
  3. Найдите утилиту. Она находится в папке bin каталога, где установлена платформа 1С. Например: C:\Program Files\1cv8\8.3.25.1546\bin\chdbfl.exe.
  4. Запустите chdbfl.exe. В поле «Имя файла БД» укажите путь к вашему файлу 1Cv8.1CD.
  5. Установите флажок «Исправлять обнаруженные ошибки» и нажмите кнопку «Выполнить».

После того как утилита завершит работу, рекомендуется снова зайти в Конфигуратор и выполнить «Тестирование и исправление» с опцией «Сжатие таблиц информационной базы». Комплексное применение этих двух инструментов часто дает положительный результат.

Метод 3: Анализ и сжатие через MS SQL Server (для сложных случаев)

Если предыдущие методы не помогли и размер *.dt файла остается неоправданно большим, значит, причина в самих данных. Чтобы понять, что именно занимает место, можно временно перенести базу на SQL-сервер. Это мощный диагностический инструмент, который позволяет заглянуть «под капот» базы данных.

Процесс состоит из нескольких этапов:

  1. Развертывание на MS SQL. Создайте пустую базу на MS SQL Server и загрузите в нее вашу информационную базу из файла *.dt.
  2. Анализ размеров таблиц. После загрузки можно выполнить специальный T-SQL скрипт, чтобы увидеть, какие таблицы занимают больше всего места. Это поможет выявить «виновника» — возможно, это таблица какого-то служебного регистра, о котором вы не подумали.

    Выполните следующий скрипт в среде 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) в порядке убывания. Проанализируйте топ списка — возможно, вы увидите там таблицы, которые не должны быть такими большими, что натолкнет на дальнейшие мысли по очистке данных.

  3. Сжатие средствами SQL (Shrink). В SQL Server есть встроенные инструменты для физического сжатия файлов базы данных. Это можно сделать через свойства базы в Management Studio (Tasks -> Shrink -> Database/Files).
  4. Обратная выгрузка в *.dt. После анализа и сжатия на стороне SQL выгрузите базу обратно в *.dt файл и разверните его в файловом варианте.

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

В заключение, проблема несжимаемой базы — распространенное явление. Начинать решение всегда стоит с самого простого и безопасного метода — выгрузки/загрузки через *.dt. Если он не помогает, значит, проблема глубже и требует более детального анализа с помощью утилиты chdbfl.exe или даже временного переноса в SQL-среду.

← На главную