Администрирование · 11 мин
Как очистить SQL базу 1С от лишних данных
Как очистить SQL базу 1С от лишних данных: удаление помеченных объектов, свёртка, шринк файлов, очистка журнала регистрации и версий объектов.
Под «очисткой SQL базы 1С» обычно понимают три разные задачи: удаление накопившихся прикладных данных (помеченные объекты, старые документы, история версий), сокращение физического размера файлов базы на SQL Server и профилактическое обслуживание (очистка журнала регистрации, процедурного кэша, реиндексация). Эти задачи решаются разными инструментами, и путать их нельзя: шринк файла не удалит лишние документы, а удаление помеченных объектов само по себе не уменьшит mdf-файл.
Работа ведётся на двух уровнях. Прикладной уровень — штатные средства 1С: «Удаление помеченных объектов», свёртка базы, обработки очистки регистров сведений. Уровень СУБД — средства Microsoft SQL Server: DBCC SHRINKFILE, перестроение индексов, настройка модели восстановления. Правильный порядок — сначала чистить данные средствами 1С, и только потом сжимать файлы на стороне SQL.
Любая очистка начинается с резервной копии. Для SQL-базы это полный backup средствами SQL Server (а не только выгрузка dt), плюс проверка, что копия восстанавливается. Без проверенной копии удаление данных и операции shrink выполнять нельзя: откатить массовое физическое удаление объектов штатными средствами невозможно.
Что именно занимает место в базе
Прежде чем чистить, полезно понять, куда ушло место. Типичные «тяжёлые» области в файловых и SQL-базах 1С: таблицы документов и их движений по регистрам, журнал регистрации, хранилище версий объектов (если включено версионирование), регистры сведений с историческими данными, присоединённые файлы, а также внутренние служебные таблицы. На стороне SQL добавляется журнал транзакций (ldf), который при полной модели восстановления без регулярных бэкапов лога может разрастись до размеров, превышающих саму базу.
Размер таблиц удобно смотреть прямо в SQL Server Management Studio: отчёт «Disk Usage by Table» по базе покажет, какие таблицы самые большие. Соответствие имён таблиц SQL объектам метаданных 1С можно получить штатной функцией «ПолучитьСтруктуруХраненияБазыДанных()» — она выводит таблицу соответствия. Это позволяет точно понять, например, что таблица _Document123 — это конкретный вид документов, а _InfoRg567 — конкретный регистр сведений.
Отчёт Disk Usage by Table в SSMS: какие таблицы крупнее всего
Модель восстановления базы и расписание бэкапов лога
Нужна реиндексация, а не удаление данных
Запуск штатного удаления помеченных объектов
Подготовка: резервная копия и тестовая база
Сделайте полный backup базы средствами SQL Server: в SSMS правой кнопкой по базе → Tasks → Back Up, тип Full. Выгрузка в dt через конфигуратор — дополнительный, но не заменяющий вариант: SQL-бэкап восстанавливается быстрее и сохраняет всё одним файлом. После создания копии проверьте её командой RESTORE VERIFYONLY или, лучше, реальным восстановлением в тестовую базу.
Все массовые операции очистки сначала выполните на копии. Это позволит оценить, сколько времени займёт процедура, сколько места освободится и не пострадают ли нужные данные. Особенно это критично для свёртки базы и обработок, удаляющих документы за период: ошибка в настройках отбора на рабочей базе необратима.
Удаление помеченных объектов
Первый и самый безопасный шаг — физическое удаление объектов, помеченных на удаление. В типовых конфигурациях это делается через раздел «Администрирование» → «Обслуживание» → «Удаление помеченных объектов». Можно выбрать автоматический режим (удалить всё, на что нет ссылок) или выборочный — со списком объектов и ручным отбором.
Учтите ограничения: объект не удалится, если на него есть ссылки из других объектов — система покажет список таких мест использования, и их нужно разобрать вручную. В монопольном режиме удаление идёт быстрее; в многопользовательской базе большие пачки лучше удалять в нерабочее время, так как операция создаёт нагрузку и блокировки. Для баз с годами накопленных пометок процесс может занять часы — это нормально.
- 1Сделайте полный backup базы в SSMS и проверьте восстановление на копии
- 2Запустите «Удаление помеченных объектов» в режиме выборочного удаления
- 3Разберите объекты, которые не удаляются из-за ссылок: очистите или замените ссылки
- 4Повторите удаление до тех пор, пока список помеченных не опустеет
- 5Проверьте освободившееся место отчётом Disk Usage by Table
Свёртка базы и удаление старых документов
Если нужно избавиться от истории за прошлые периоды, используется свёртка: остатки на дату среза переносятся в документы ввода начальных остатков, а документы раньше даты удаляются. В типовых конфигурациях есть штатная обработка «Свёртка информационной базы» (обычно в разделе «Администрирование» → «Обслуживание»), для отраслевых решений существуют специализированные обработки.
Свёртка — самая рискованная операция очистки. Она необратимо меняет структуру данных: отчёты за закрытые периоды перестанут формироваться в прежнем виде, а интеграции и обмены могут потребовать повторной начальной синхронизации. Перед запуском согласуйте дату среза с бухгалтерией: периоды, по которым возможны налоговые проверки или не закрыты взаиморасчёты, трогать нельзя.
Альтернатива полной свёртке — точечное удаление: пометить на удаление документы за старый период обработкой группового изменения и затем выполнить физическое удаление. Это прозрачнее и управляемее, но требует аккуратности с движениями по регистрам и связанными объектами.
Очистка журнала регистрации и версий объектов
Журнал регистрации в клиент-серверном варианте хранится в отдельном каталоге на сервере 1С (по умолчанию в каталоге служебных файлов базы) и может занимать гигабайты. Сократить его можно из конфигуратора: «Администрирование» → «Журнал регистрации» → кнопка «Сократить» — укажите дату, раньше которой события удалить, и сохраните удаляемую часть в файл при необходимости. Также полезно снизить уровень регистрируемых событий в настройках журнала, оставив только ошибки и предупреждения.
Если в типовой конфигурации включено версионирование объектов («Администрирование» → «Общие настройки» → «История изменений»), таблица версий со временем становится одной из самых больших. Настройте срок хранения версий: для большинства объектов достаточно хранить историю несколько месяцев, а не бессрочно. Очистка устаревших версий выполняется штатной регламентной операцией после изменения настроек хранения.
Отдельно проверьте регистры сведений, связанные с обменами и фоновыми задачами: очереди сообщений, результаты обмена данными, протоколы. Во многих базах именно они незаметно накапливают миллионы записей. Очищайте их штатными средствами соответствующих подсистем, а не прямыми запросами DELETE к таблицам SQL — прямое вмешательство в таблицы 1С не поддерживается и может нарушить целостность данных.
Сжатие файлов базы на стороне SQL Server
После того как данные удалены, свободное место остаётся внутри файлов mdf/ndf. Вернуть его диску помогает операция shrink. Выполнять её лучше командой DBCC SHRINKFILE с указанием целевого размера, а не DBCC SHRINKDATABASE — так контролируемее. Операцию запускайте в нерабочее время: она создаёт нагрузку на дисковую подсистему и сильно фрагментирует индексы.
После shrink обязательно выполните перестроение индексов, иначе производительность запросов заметно просядет. Учтите: если данные в базе снова будут расти, файл снова увеличится — shrink разумно делать только после массового удаления данных, а не как регулярную процедуру.
DBCC SHRINKFILE (N'MyBase1C', 51200);
GO
ALTER INDEX ALL ON _Document123 REBUILD;
GOРаздутый ldf-файл лечится иначе: проверьте модель восстановления базы. Если не ведутся регулярные бэкапы журнала транзакций, переведите базу в модель Simple — тогда журнал будет автоматически усекаться. После смены модели можно сжать ldf через SHRINKFILE с указанием логического имени лог-файла.
Регламентное обслуживание после очистки
Завершите работу стандартным набором обслуживания: перестроение или реорганизация индексов, обновление статистики и проверка целостности базы командой DBCC CHECKDB. Эти операции восстанавливают производительность после массовых удалений и shrink. Настройте их как регулярный план обслуживания — еженедельную реиндексацию и ежедневные бэкапы, чтобы ситуация с разросшейся базой не повторилась.
Проверьте результат на рабочей базе: ключевые отчёты формируются, обмены проходят, пользователи не жалуются на блокировки. Сравните размеры файлов до и после — фактический выигрыш виден по размеру mdf/ldf на диске и по отчёту Disk Usage.
Как проверить результат
Файл уменьшился после shrink, свободное место появилось
Размер не изменился — данные не удалены или shrink не выполнялся
Отчёты за текущие периоды работают как раньше
Ошибки или пустые данные за периоды до свёртки, которые должны были сохраниться
Синхронизации проходят без ошибок
Ошибки о недостающих объектах — удалено лишнее, восстановите из копии
После реиндексации запросы работают быстро
После shrink отчёты стали медленнее — не выполнено перестроение индексов
Частые вопросы
Можно ли очистить базу 1С напрямую запросами SQL?
Технически возможно, но делать этого не следует. Структура таблиц 1С сложна (движения, итоги, служебные поля), и прямое удаление нарушает целостность данных и лишает решение поддержки. Используйте штатные средства: удаление помеченных объектов, свёртку, обработки очистки регистров. SQL-инструменты применяйте только для shrink, реиндексации и управления журналом транзакций.
Почему после удаления данных файл базы не уменьшился?
Удаление строк освобождает место внутри файла, но сам файл на диске не сжимается автоматически. Чтобы вернуть место диску, выполните DBCC SHRINKFILE на стороне SQL Server, а затем перестройте индексы.
Что делать с огромным ldf-файлом?
Проверьте модель восстановления базы. При модели Full без регулярных бэкапов журнала транзакций лог растёт беспредельно. Если точки восстановления на произвольный момент не нужны, переведите базу в модель Simple и сожмите лог через SHRINKFILE. Если модель Full нужна — настройте регулярные бэкапы лога.
Как часто нужно чистить базу?
Массовая очистка и свёртка — разовые или редкие операции по мере роста базы. Регулярными должны быть: удаление помеченных объектов (по мере накопления), сокращение журнала регистрации (раз в несколько месяцев), контроль сроков хранения версий объектов и плановая реиндексация с обновлением статистики.
Удаление помеченных объектов идёт очень долго — это нормально?
Да, в больших базах с годами накопленных пометок процесс может занимать часы. Запускайте его в нерабочее время, при возможности — в монопольном режиме, и не прерывайте принудительно: прерывание оставит транзакции незавершёнными и увеличит журнал транзакций.
Чем свёртка отличается от простого удаления старых документов?
Свёртка переносит остатки по регистрам на дату среза в документы ввода остатков, поэтому отчёты после даты среза остаются корректными. Простое удаление документов не формирует остатки — итоги по регистрам «поплывут», и данные станут недостоверными.
Что важно запомнить
Чистите данные штатными средствами 1С, а файлы сжимайте на стороне SQL Server — и только в таком порядке. Перед любыми массовыми операциями делайте проверенный backup и отрабатывайте процедуру на копии. После shrink обязательно перестраивайте индексы, а регулярное обслуживание настройте как план, чтобы база не разрасталась снова.