К статье
Практический материал

Администрирование · 11 мин

Как сжать базу 1С и уменьшить её размер

Как сжать базу 1С файлового и клиент-серверного формата: тестирование и исправление, сжатие таблиц, shrink в MS SQL, очистка версий и регистров.

Со временем информационная база 1С заметно «разбухает»: в ней копятся удалённые объекты, версии документов, история изменений, служебные данные и пустые страницы внутри файла. Даже если вы регулярно удаляете старые документы, физический размер файла базы (1Cv8.1CD) или таблиц в СУБД сам по себе не уменьшается — освобождённое место остаётся зарезервированным внутри.

Сжатие базы решает две задачи: возвращает дисковое пространство и ускоряет работу, поскольку компактные таблицы быстрее читаются и индексируются. Способ сжатия зависит от формата базы: для файловых баз используется встроенный механизм платформы, для клиент-серверных — инструменты СУБД. Кроме того, часто эффективнее сначала удалить лишние данные штатными средствами, а уже потом сжимать физический файл.

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

Почему база 1С растёт и когда нужно сжатие

Файл базы 1С устроен как контейнер таблиц. Когда вы удаляете документ или элемент справочника, запись помечается как удалённая, но место на диске не возвращается — оно будет переиспользовано под новые данные. Если объём удалений велик (например, свёртка базы, массовая очистка старых периодов), внутри файла образуется много «пустот».

Отдельный источник роста — механизмы истории и версионирования: хранение версий объектов, история данных, журналы регистрации с большой глубиной хранения. В клиент-серверных базах к этому добавляются журналы транзакций СУБД, которые могут занимать десятки гигабайт при неправильной модели восстановления.

Файл 1Cv8.1CD растёт, хотя данных малоВнутри накопились пустые страницы и удалённые записи

Сравните размер файла с реальным объёмом данных — поможет сжатие таблиц

База на SQL занимает много места, данных немногоТребуется shrink файлов данных или журнала

Проверьте размер журнала транзакций и модель восстановления

Медленно открываются списки и отчётыВозможна фрагментация таблиц и индексов

Выполните реиндексацию вместе со сжатием

Быстро растёт размер при активной работеВключены версии объектов или история данных

Проверьте настройки версионирования и истории в конфигураторе

Подготовка: резервная копия и условия запуска

Перед любой операцией сжатия сделайте полную резервную копию. Для файловой базы достаточно скопировать файл 1Cv8.1CD при остановленной работе пользователей или выгрузить базу через конфигуратор («Администрирование → Выгрузить информационную базу»). Для клиент-серверной базы используйте штатные средства СУБД — backup в MS SQL или pg_dump в PostgreSQL.

Сжатие требует монопольного доступа: завершите сеансы всех пользователей, отключите регламентные и фоновые задания, остановите агенты обмена данными. В клиент-серверном варианте блокировку сеансов удобно установить через консоль кластера или типовую обработку «Блокировка работы пользователей».

Убедитесь, что на диске достаточно свободного места: в процессе сжатия платформа фактически создаёт новую копию таблиц, поэтому потребуется пространство, сопоставимое с размером самой базы. Для больших баз ориентируйтесь на запас не менее 50–100 % от текущего размера файла.

Сжатие файловой базы через «Тестирование и исправление»

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

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

Галочку «Проверка ссылочной целостности» имеет смысл включать отдельно и только при подозрении на битые ссылки: эта проверка заметно увеличивает время работы. Для регулярного обслуживания достаточно реиндексации и сжатия.

Длительность процедуры зависит от размера базы и скорости диска: маленькая база сжимается за минуты, база в десятки гигабайт — за часы. Прогресс отображается в окне конфигуратора, но без точного процента, поэтому запаситесь терпением и не прерывайте процесс.

Сжатие клиент-серверной базы на MS SQL и PostgreSQL

В клиент-серверном варианте «Тестирование и исправление» со сжатием таблиц в конфигураторе для SQL-баз не выполняет физическое уменьшение файлов СУБД — оно полезно в основном для реиндексации и проверки. Реальное освобождение места делается средствами самой СУБД.

Сжатие в MS SQL Server

В MS SQL используется операция SHRINKDATABASE или SHRINKFILE через SQL Server Management Studio. Перед сжатием проверьте модель восстановления базы: если журнал транзакций разросся, переведите базу в модель Simple, сделайте backup, выполните сжатие журнала, затем при необходимости верните Full и сразу создайте полную резервную копию.

sql
DBCC SHRINKDATABASE (N'MyBase', 10);
GO
-- либо точечно по файлам:
DBCC SHRINKFILE (N'MyBase_Log', 1024);
GO

Учтите ограничение: частое сжатие файлов данных в MS SQL вызывает фрагментацию индексов и считается нежелательной регулярной практикой. После shrink рекомендуется перестроить индексы (rebuild). Сжатие оправдано после разовых масштабных удалений — свёртки базы, очистки истории, удаления старых периодов.

Очистка в PostgreSQL

В PostgreSQL аналогом служит команда VACUUM FULL, которая перезаписывает таблицы и возвращает место операционной системе. Обычный VACUUM место не возвращает, а только помечает его свободным для переиспользования. VACUUM FULL требует блокировки таблицы и свободного места на диске, поэтому выполняется в окне обслуживания.

sql
VACUUM FULL;
-- или для отдельной таблицы:
VACUUM FULL tablename;

Уменьшение базы за счёт очистки данных

Сжатие файла не поможет, если внутри реально хранятся гигабайты ненужных данных. Поэтому первым шагом часто идёт не сжатие, а очистка: удаление помеченных объектов, отключение или ограничение версионирования, чистка журнала регистрации и удаление старых данных обменов.

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

Маршрут решения

Как выбрать действие

Удалили много данных, но файл не уменьшилсяВыполните сжатие таблиц (файловая база) или shrink/VACUUM FULL (SQL)
База растёт из-за версий объектов и историиНастройте сроки хранения версий и отключите историю для ненужных объектов, затем сожмите
Файлы и картинки хранятся внутри базыПеренесите файлы в тома хранения, очистите данные и выполните сжатие
Разросся журнал транзакций MS SQLПроверьте модель восстановления, сделайте backup и сожмите журнал
База старая, данных много за прошлые годыРассмотрите свёртку базы вместо простого сжатия

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

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Размер файла базы после сжатия
Норма

Файл заметно уменьшился после массовых удалений

Тревожный признак

Размер не изменился — возможно, данные реально занимают место, а не пустоты

Запуск базы и открытие списков
Норма

База открывается, отчёты и списки работают

Тревожный признак

Ошибки при открытии — восстановите базу из копии и повторите с проверкой целостности

Скорость работы
Норма

Списки и отчёты открываются быстрее или так же

Тревожный признак

После shrink в MS SQL запросы замедлились — выполните перестроение индексов

Свободное место на диске
Норма

Место вернулось операционной системе

Тревожный признак

Место не появилось — проверьте, не сжимали ли вы не тот файл (например, только журнал)

Типичные ошибки
01
Сжатие без резервной копии — при сбое базу придётся восстанавливать из старого архива с потерей данных
02
Прерывание процесса кнопкой или перезагрузкой — высокий риск повреждения файла базы
03
Регулярный shrink в MS SQL как «профилактика» — приводит к фрагментации индексов и замедлению работы
04
Сжатие без предварительной очистки — файл уменьшится незначительно, потому что место занимают реальные данные
05
Запуск при работающих пользователях — процедура не начнётся или завершится с ошибкой монопольного доступа
06
Сжатие при нехватке места на диске — процесс упадёт на середине, оставив базу в неопределённом состоянии

Ещё одна частая ситуация: администратор сжимает базу, ожидая ускорения, но проблема была в нехватке оперативной памяти или устаревшей статистике СУБД. Сжатие устраняет именно «пустоты» и фрагментацию, а не все причины медленной работы.

Как часто сжимать базу и чем заменить процедуру

Регулярное сжатие «по расписанию» не требуется. Оно оправдано после событий, освобождающих много места: свёртка базы, удаление старых периодов, массовая чистка версий и истории, перенос файлов из базы в тома. В остальное время платформа и СУБД сами переиспользуют свободное место внутри файлов.

Для поддержания скорости работы полезнее другие регламентные операции: реиндексация, обновление статистики в СУБД, контроль размера журнала регистрации и транзакционных журналов. Если база неизбежно растёт из-за объёма документов, правильное стратегическое решение — свёртка старых периодов или переход на клиент-серверный вариант с грамотным обслуживанием СУБД.

Итог

Что важно запомнить

Сжатие возвращает диску место, освобождённое удалёнными данными, но не удаляет данные само. Файловая база сжимается через «Тестирование и исправление», клиент-серверная — средствами СУБД. Всегда делайте резервную копию, обеспечьте монопольный доступ и запас свободного места на диске, а после shrink в MS SQL перестройте индексы.

Часто задаваемые вопросы

Можно ли сжать базу 1С без конфигуратора?

Для файловой базы — нет, штатный механизм сжатия доступен только в конфигураторе через «Тестирование и исправление». Альтернатива — выгрузка базы в .dt и загрузка в новый пустой каталог: при загрузке файл создаётся заново и фактически оказывается сжатым. Для SQL-баз сжатие делается средствами СУБД без конфигуратора.

Сколько времени занимает сжатие базы?

Зависит от размера базы, скорости диска и объёма «пустот». Небольшие базы обрабатываются за минуты, базы объёмом в десятки гигабайт могут сжиматься несколько часов. Планируйте процедуру на нерабочее время и не прерывайте её, даже если кажется, что процесс завис.

Удалит ли сжатие какие-то данные из базы?

Нет. Сжатие только физически перезаписывает таблицы, убирая пустые страницы, но не трогает существующие записи. Удаление данных — отдельная операция, которую выполняют до сжатия штатными средствами или обработками.

Почему после удаления документов размер файла не уменьшился?

Платформа не возвращает освобождённое место операционной системе автоматически — оно остаётся зарезервированным внутри файла для будущих записей. Чтобы вернуть место на диск, после массовых удалений нужно выполнить сжатие таблиц информационной базы.

Нужно ли сжимать базу регулярно для профилактики?

Нет, регулярное сжатие не требуется и в MS SQL даже вредно из-за фрагментации индексов. Сжатие выполняют по событию: после свёртки, очистки истории, удаления больших объёмов данных. Для профилактики полезнее реиндексация и обновление статистики.

Что делать, если сжатие завершилось ошибкой?

Не пытайтесь повторно запускать процедуру вслепую. Сначала проверьте базу на открытие: если она работает, выполните «Тестирование и исправление» с проверкой логической целостности. Если база не открывается — восстановите её из резервной копии и только потом повторяйте попытку, убедившись в достатке свободного места на диске.