Часто системные администраторы и программисты 1С сталкиваются с ситуацией, когда после проведения свертки информационной базы и удаления огромного количества документов (например, за несколько лет), физический размер файла базы данных .1CD или размер в SQL практически не уменьшается. Рассмотрим подробнее, почему так происходит, и разберем по шагам, как эффективно «похудеть» базу, чтобы ее было удобно пересылать и архивировать.
Прежде чем приступать к удалению, выясним причину раздувания базы. Удаление документов часто не дает эффекта, так как основные данные могут храниться в регистрах сведений, макетах или технических таблицах. Проанализируем ситуацию с помощью инструментария. Если у нас файловая база, воспользуемся утилитой Tool_1CD. Она позволяет увидеть физический размер каждой таблицы внутри файла .1CD. Если база серверная, построим стандартный отчет в консоли управления MSSQL — «Disk Usage by Top Tables».
Обратим внимание на следующие таблицы:
_InfoReg (Регистры сведений)._ObjectVersions)._JobHistory (история заданий) или таблицы замеров производительности.Разберем важный нюанс: в базе, которая стоит на поддержке с возможностью изменений, хранится не одна, а целых три конфигурации: основная, конфигурация базы данных и конфигурация поставщика. Каждая из них в современных типовых решениях (БП 3.0, УТ 11, ERP) может весить от 500 Мб до 1 Гб. В сумме только метаданные могут занимать около 2 Гб, даже если в базе совсем нет документов.
Проанализируем шаги по оптимизации конфигурации:
.cf..cf, создать чистую базу и загрузить её обратно. Иногда это помогает избавиться от внутреннего «мусора» в таблицах метаданных.Выясним причину, по которой «сжатие таблиц» не всегда помогает. После массового удаления документов в базе остаются записи в связанных регистрах. Огромный объем часто занимают данные, о которых пользователь даже не догадывается.
Рассмотрим основные точки очистки:
ЗамерыПроизводительности может раздуться до нескольких гигабайт. Если данные не нужны, очистим его. Для этого можно воспользоваться обработкой или SQL-запросом (для серверных баз):
// Пример программной очистки регистра (в модуле обработки)
Набор = РегистрыСведений.ЗамерыПроизводительности.СоздатьНаборЗаписей();
Набор.Записать();
Важно понимать: когда 1С удаляет запись, она просто помечает место в файле .1CD как «свободное», но размер файла на диске не уменьшается. Чтобы вернуть место операционной системе, нужно выполнить физическую реорганизацию.
Выполним следующие действия:
.dt, создадим новую пустую информационную базу и загрузим .dt в нее. При этом файл .1CD будет сформирован заново максимально компактно.Если ваша база работает на MSSQL, не забудьте выполнить операцию Shrink Database (Сжатие базы данных) после массового удаления данных, так как SQL-сервер также резервирует место в файлах .mdf и .ldf.
Посмотрим на такие объекты, как классификаторы (БАНКИ, ФИАС/КЛАДР). Если в базу загружены адресные сведения по всей стране, они могут занимать значительный объем. В современных версиях 1С рекомендуется использовать веб-сервис для проверки адресов, что позволяет полностью очистить таблицы классификаторов в самой базе.
Также проанализируем Журнал регистрации. При массовом удалении 150 тысяч документов журнал регистрации фиксирует каждое действие, из-за чего его файлы могут вырасти в разы. Настройте сокращение журнала регистрации через «Администрирование», чтобы удалить старые записи, или физически удалите/архивируйте папку 1Cv8Log в каталоге базы данных (предварительно завершив работу всех пользователей).
Резюмируем: чтобы реально сократить место, недостаточно просто удалить документы. Нужно очистить технические регистры, оптимизировать конфигурацию (удалить лишние макеты драйверов), очистить индексы полнотекстового поиска и обязательно выполнить пересоздание базы через выгрузку/загрузку .dt или процедуру сжатия.