В процессе эксплуатации любой системы на базе 1С:Предприятие администраторы и разработчики неизбежно сталкиваются с необходимостью обслуживания информационной базы. Одним из ключевых инструментов для этого является режим «Тестирование и исправление» (ТиИ). Среди множества его настроек пункт «Сжатие таблиц информационной базы» вызывает немало вопросов, особенно у начинающих специалистов. Разберем подробно, что скрывается за этой операцией, как она влияет на физические файлы базы данных и почему её важно выполнять после массового удаления объектов.
Для начала проанализируем, как именно движок базы данных (будь то встроенный механизм файловой версии 1С или внешняя СУБД) работает с информацией. Когда пользователь или программная обработка удаляет запись (например, документ или строку в регистре), система зачастую не затирает данные на диске мгновенно. Вместо этого запись помечается специальным флагом как «удаленная» или «свободная» на уровне движка базы данных.
Рассмотрим ситуацию: мы удалили из базы тысячи документов прошлых лет. С точки зрения пользователя, база стала «чище», но если мы посмотрим на физический размер файла 1Cv8.1CD (в файловом варианте), то увидим, что его размер не уменьшился ни на байт. Это происходит потому, что место, которое занимали удаленные записи, теперь считается «пустым» внутри файла, но сам файл не сокращается. Система оставляет это пространство для будущих записей, чтобы не тратить ресурсы на изменение размера файла при каждом добавлении новой строки. Сжатие — это процесс, который позволяет «схлопнуть» эти пустоты и вернуть неиспользуемое пространство операционной системе.
В файловом режиме работы 1С сжатие является критически важной операцией. Мы должны понимать, что данные в файле 1Cv8.1CD организованы блоками. При активной работе (постоянное добавление и удаление записей) файл становится фрагментированным. Проанализируем, что происходит при запуске процедуры сжатия:
Важный момент: в файловых базах существует жесткое ограничение на размер одной таблицы (по умолчанию это 4 Гб). Если ваша таблица (например, _InfoReg — регистр сведений) разрослась до этого предела из-за накопленного «мусора» от удаленных записей, вы не сможете добавить в неё новые данные, даже если предварительно очистите старые. Только выполнение операции «Сжатие» позволит реально освободить место внутри таблицы и продолжить работу.
Выясним причину, по которой многие специалисты считают этот флажок в ТиИ бесполезным для серверных баз (MS SQL Server, PostgreSQL). В клиент-серверном режиме управление физическим пространством ложится на плечи системы управления базами данных (СУБД).
Когда вы запускаете «Сжатие» через конфигуратор 1С для базы на SQL, платформа посылает команды серверу, но эффект часто оказывается минимальным. Для реального уменьшения размера файлов базы данных (файлов .mdf и .ldf) профессионалы используют штатные средства самой СУБД. Например, в MS SQL Server это команда SHRINKDATABASE или SHRINKFILE. Поэтому для серверных решений пункт «Сжатие» в ТиИ обычно пропускают, заменяя его регламентным обслуживанием на стороне сервера.
Часто возникает вопрос: относится ли сжатие к конкретным объектам, например, к регистрам сведений? Ответ однозначен: да. С точки зрения системы управления базами данных, нет никакой принципиальной разницы между таблицей, где хранятся документы, и таблицей, где хранятся записи регистра сведений. Все они подвержены логическому удалению и образованию пустот.
Если вы проводите очистку огромного регистра сведений (например, историю версий объектов или кэш каких-то расчетов), выполнение сжатия после удаления будет обязательным шагом для оптимизации дискового пространства и повышения скорости доступа к оставшимся данным.
Сжатие напрямую влияет на скорость работы системы. Рассмотрим ситуацию с фрагментированным файлом: головке жесткого диска (в случае HDD) или контроллеру (в случае SSD) приходится совершать лишние прыжки по блокам данных, так как полезная информация перемешана с пустыми блоками. После сжатия данные располагаются компактно и последовательно, что ускоряет операции чтения.
При выполнении сжатия 1С автоматически инициирует перестроение индексов. Это логично, так как физическое положение записей в файле изменилось, и старые индексные ссылки стали недействительными. Поэтому часто рекомендуется выполнять «Сжатие» вместе с пунктом «Реиндексация таблиц информационной базы» для достижения максимального эффекта.
Разберем, как правильно и безопасно провести процедуру сжатия:
Администрирование — Тестирование и исправление....Посмотрим на пример ситуации, когда это необходимо. Предположим, вы выполнили стандартную обработку Удаление помеченных объектов и удалили 50% данных за прошлые годы. Ваша база занимала 10 Гб. После удаления она по-прежнему занимает 10 Гб. Только после выполнения «Сжатия» размер файла может уменьшиться до 5-6 Гб, что существенно упростит создание ежедневных бэкапов и ускорит работу антивирусов или систем копирования.
Таким образом, мы выяснили, что операция «Сжатие» является мощным инструментом оптимизации, особенно критичным для файловых информационных баз 1С. Она позволяет не только экономить место на диске, но и поддерживать быстродействие системы на высоком уровне, устраняя фрагментацию данных внутри таблиц.