При активной работе со старыми, но до сих пор поддерживаемыми конфигурациями (такими как 1С:Управление торговлей редакции 10.3) системные администраторы и разработчики часто сталкиваются с парадоксальной ситуацией. База данных, в которой ведется учет по одной небольшой организации с минимальным количеством документов, после очередного обновления конфигурации резко "раздувается" в объеме — например, с 300 МБ до 1.5 ГБ. При этом стандартное тестирование и исправление сжатием таблиц не приносит видимых результатов.
В этой статье мы подробно разберем, почему происходит скачкообразный рост файловой базы данных, как устроена внутренняя структура хранения конфигурации CONFIG и какие практические шаги помогут вернуть размер файла 1Cv8.1CD к исходным минимальным значениям.
Для начала проанализируем, что именно вызывает столь бурный рост размера базы при обновлении на релизы линейки 10.3.48.x и выше. Если воспользоваться специализированными утилитами для анализа структуры файловой базы (например, Tool_1CD), то станет очевидно, что основной объем занимает не таблица с документами или справочниками, а системная таблица конфигурации — CONFIG.
Выделим ключевые причины этого явления:
.dll, .so, .jar) были встроены непосредственно внутрь конфигурации в ветку ОбщиеМакеты в виде двоичных данных.1Cv8.1CD сразу три конфигурации:
.cf превышает 300-400 МБ, их тройное хранение мгновенно раздувает базу до 1-1.5 ГБ еще до внесения каких-либо пользовательских данных.
Для понимания того, почему обычное "Сжатие таблиц" в режиме "Тестирование и исправление" не уменьшает физический размер файла базы данных, обратимся к особенностям хранения данных формата .1CD.
Файловая СУБД 1С имеет страничную организацию. Физический файл базы состоит из страниц размером 4096 байт (4 КБ). Страницы организованы в древовидную структуру и делятся на три типа:
При обновлении конфигурации старые записи в таблице CONFIG не заменяются физически в тех же ячейках. Вместо этого старая страница помечается как "удаленная", а обновленные данные (например, новые тяжелые общие макеты драйверов) записываются в новые страницы в конец файла. Из-за этого файл базы данных лавинообразно увеличивается.
Стандартный механизм сжатия таблиц в "Тестировании и исправлении" очищает записи внутри таблиц, но часто из-за фрагментации дерева индексов СУБД 1С не может освободить эти страницы на уровне операционной системы и уменьшить размер самого файла 1Cv8.1CD. База остается раздутой, храня внутри себя "пустоту", зарезервированную под будущие записи.
---
Это самый простой, безопасный и штатный способ уменьшить физический размер базы данных. При выгрузке информационной базы в файл резервной копии .dt платформа считывает только реально используемые, активные записи из всех таблиц, полностью игнорируя удаленные страницы, кэш обновлений и фрагментированные системные области.
Выполним этот процесс по шагам:
Администрирование — Активные пользователи).Администрирование — Выгрузить информационную базу... и сохраните файл с расширением .dt на жесткий диск.C:\1C_Bases\UT_New).Администрирование — Загрузить информационную базу... и выберите ранее выгруженный файл .dt.После завершения загрузки платформа сформирует файл 1Cv8.1CD с нуля. Все страницы данных запишутся последовательно, без фрагментации, а неиспользуемое свободное пространство исчезнет. В большинстве случаев размер базы уменьшается на 30–50%.
---
Если ваша база данных снята с поддержки (или включена возможность изменения), вы можете радикально снизить размер конфигурации (и, как следствие, таблицы CONFIG), удалив из нее двоичные макеты оборудования, которые гарантированно не используются в вашей организации. Например, если вы используете только фискальные регистраторы марки "Атол", вам не нужны встроенные компоненты для касс "Штрих-М", "Дримкас", "Эвотор" и т.д.
Рассмотрим, как это сделать программно или вручную:
Общие — Общие макеты.ДрайверККТДримкас, ДрайверШтрихМККТ54ФЗ и другие). Обратите внимание: такие макеты имеют тип Двоичные данные.Для автоматизации поиска тяжелых макетов или очистки можно использовать несложный код в обработке. Посмотрим на пример кода, позволяющий проанализировать макеты:
ВыборкаМакетов = Метаданные.ОбщиеМакеты;
Для Каждого Макет Из ВыборкаМакетов Цикл
// Проверяем имя макета на наличие ключевых слов драйверов
Если Найти(Макет.Имя, "Драйвер") > 0 Или Найти(Макет.Имя, "Компонента") > 0 Тогда
ЗаписьЖурналаРегистрации("АнализРазмера", УровеньЖурналаРегистрации.Информация, , ,
"Найден потенциально тяжелый макет: " + Макет.Имя);
КонецЕсли;
КонецЦикла;
После удаления или очистки макетов обязательно выполните обновление конфигурации базы данных (клавиша F7), а затем проведите процедуру выгрузки/загрузки через .dt, описанную в первом способе. Размер базы может снизиться в несколько раз.
---
Если база данных обновлялась на протяжении многих лет, системные таблицы могут содержать огромное количество "мусора" и устаревших записей регистрационных таблиц обновлений, которые не вычищаются обычными методами. В этом случае наиболее эффективным решением будет полный перенос данных в абсолютно "чистую" базу.
Разберем этот процесс по шагам:
Конфигурация — Сохранить конфигурацию в файл...), получив чистый файл .cf.Конфигурация — Загрузить конфигурацию из файла...). Выполните обновление конфигурации базы данных (F7). Теперь у вас есть полностью идентичная по структуре, но абсолютно пустая база без истории старых транзакций и "мусора" в таблицах CONFIG.Этот метод гарантирует, что новая база будет иметь минимально возможный физический размер, так как таблица CONFIG запишется в чистом виде без накопленной за годы истории обновлений, а в таблицах данных будут отсутствовать битые ссылки и помеченные на удаление объекты.
---
Мы проанализировали проблему роста размера файловых баз данных 1С и выяснили, что основной причиной является утяжеление конфигурационной части из-за интеграции новых драйверов торгового оборудования и модулей государственных систем. Для поддержания базы данных в оптимальном состоянии рекомендуем придерживаться следующих правил:
.dt и загрузки обратно. Рекомендуется проводить эту процедуру после каждого крупного обновления конфигурации.CONFIG и CONFIGSAVE, а в некоторых случаях могут безвозвратно повредить структуру базы данных..cf или делайте выгрузку информационной базы без присоединенных файлов и тяжелых логов (очищайте журнал регистрации перед отправкой).