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

Администрирование · 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 — конкретный регистр сведений.

Быстро растёт mdf-файлКопятся прикладные данные

Отчёт Disk Usage by Table в SSMS: какие таблицы крупнее всего

Огромный ldf-файлЖурнал транзакций не усекается

Модель восстановления базы и расписание бэкапов лога

Медленно работают отчётыФрагментация индексов и устаревшая статистика

Нужна реиндексация, а не удаление данных

Много помеченных на удалениеОбъекты не удалены физически

Запуск штатного удаления помеченных объектов

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

Сделайте полный backup базы средствами SQL Server: в SSMS правой кнопкой по базе → Tasks → Back Up, тип Full. Выгрузка в dt через конфигуратор — дополнительный, но не заменяющий вариант: SQL-бэкап восстанавливается быстрее и сохраняет всё одним файлом. После создания копии проверьте её командой RESTORE VERIFYONLY или, лучше, реальным восстановлением в тестовую базу.

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

Удаление помеченных объектов

Первый и самый безопасный шаг — физическое удаление объектов, помеченных на удаление. В типовых конфигурациях это делается через раздел «Администрирование» → «Обслуживание» → «Удаление помеченных объектов». Можно выбрать автоматический режим (удалить всё, на что нет ссылок) или выборочный — со списком объектов и ручным отбором.

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

Порядок действий
  1. 1
    Сделайте полный backup базы в SSMS и проверьте восстановление на копии
  2. 2
    Запустите «Удаление помеченных объектов» в режиме выборочного удаления
  3. 3
    Разберите объекты, которые не удаляются из-за ссылок: очистите или замените ссылки
  4. 4
    Повторите удаление до тех пор, пока список помеченных не опустеет
  5. 5
    Проверьте освободившееся место отчётом Disk Usage by Table

Свёртка базы и удаление старых документов

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

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

Альтернатива полной свёртке — точечное удаление: пометить на удаление документы за старый период обработкой группового изменения и затем выполнить физическое удаление. Это прозрачнее и управляемее, но требует аккуратности с движениями по регистрам и связанными объектами.

Очистка журнала регистрации и версий объектов

Журнал регистрации в клиент-серверном варианте хранится в отдельном каталоге на сервере 1С (по умолчанию в каталоге служебных файлов базы) и может занимать гигабайты. Сократить его можно из конфигуратора: «Администрирование» → «Журнал регистрации» → кнопка «Сократить» — укажите дату, раньше которой события удалить, и сохраните удаляемую часть в файл при необходимости. Также полезно снизить уровень регистрируемых событий в настройках журнала, оставив только ошибки и предупреждения.

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

Отдельно проверьте регистры сведений, связанные с обменами и фоновыми задачами: очереди сообщений, результаты обмена данными, протоколы. Во многих базах именно они незаметно накапливают миллионы записей. Очищайте их штатными средствами соответствующих подсистем, а не прямыми запросами DELETE к таблицам SQL — прямое вмешательство в таблицы 1С не поддерживается и может нарушить целостность данных.

Сжатие файлов базы на стороне SQL Server

После того как данные удалены, свободное место остаётся внутри файлов mdf/ndf. Вернуть его диску помогает операция shrink. Выполнять её лучше командой DBCC SHRINKFILE с указанием целевого размера, а не DBCC SHRINKDATABASE — так контролируемее. Операцию запускайте в нерабочее время: она создаёт нагрузку на дисковую подсистему и сильно фрагментирует индексы.

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

sql
DBCC SHRINKFILE (N'MyBase1C', 51200);
GO
ALTER INDEX ALL ON _Document123 REBUILD;
GO

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

Регламентное обслуживание после очистки

Завершите работу стандартным набором обслуживания: перестроение или реорганизация индексов, обновление статистики и проверка целостности базы командой DBCC CHECKDB. Эти операции восстанавливают производительность после массовых удалений и shrink. Настройте их как регулярный план обслуживания — еженедельную реиндексацию и ежедневные бэкапы, чтобы ситуация с разросшейся базой не повторилась.

Проверьте результат на рабочей базе: ключевые отчёты формируются, обмены проходят, пользователи не жалуются на блокировки. Сравните размеры файлов до и после — фактический выигрыш виден по размеру mdf/ldf на диске и по отчёту Disk Usage.

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

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

Размер mdf-файла на диске
Норма

Файл уменьшился после shrink, свободное место появилось

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

Размер не изменился — данные не удалены или shrink не выполнялся

Формирование отчётов
Норма

Отчёты за текущие периоды работают как раньше

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

Ошибки или пустые данные за периоды до свёртки, которые должны были сохраниться

Обмены и интеграции
Норма

Синхронизации проходят без ошибок

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

Ошибки о недостающих объектах — удалено лишнее, восстановите из копии

Фрагментация индексов
Норма

После реиндексации запросы работают быстро

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

После shrink отчёты стали медленнее — не выполнено перестроение индексов

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

Частые вопросы

Можно ли очистить базу 1С напрямую запросами SQL?

Технически возможно, но делать этого не следует. Структура таблиц 1С сложна (движения, итоги, служебные поля), и прямое удаление нарушает целостность данных и лишает решение поддержки. Используйте штатные средства: удаление помеченных объектов, свёртку, обработки очистки регистров. SQL-инструменты применяйте только для shrink, реиндексации и управления журналом транзакций.

Почему после удаления данных файл базы не уменьшился?

Удаление строк освобождает место внутри файла, но сам файл на диске не сжимается автоматически. Чтобы вернуть место диску, выполните DBCC SHRINKFILE на стороне SQL Server, а затем перестройте индексы.

Что делать с огромным ldf-файлом?

Проверьте модель восстановления базы. При модели Full без регулярных бэкапов журнала транзакций лог растёт беспредельно. Если точки восстановления на произвольный момент не нужны, переведите базу в модель Simple и сожмите лог через SHRINKFILE. Если модель Full нужна — настройте регулярные бэкапы лога.

Как часто нужно чистить базу?

Массовая очистка и свёртка — разовые или редкие операции по мере роста базы. Регулярными должны быть: удаление помеченных объектов (по мере накопления), сокращение журнала регистрации (раз в несколько месяцев), контроль сроков хранения версий объектов и плановая реиндексация с обновлением статистики.

Удаление помеченных объектов идёт очень долго — это нормально?

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

Чем свёртка отличается от простого удаления старых документов?

Свёртка переносит остатки по регистрам на дату среза в документы ввода остатков, поэтому отчёты после даты среза остаются корректными. Простое удаление документов не формирует остатки — итоги по регистрам «поплывут», и данные станут недостоверными.

Итог

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

Чистите данные штатными средствами 1С, а файлы сжимайте на стороне SQL Server — и только в таком порядке. Перед любыми массовыми операциями делайте проверенный backup и отрабатывайте процедуру на копии. После shrink обязательно перестраивайте индексы, а регулярное обслуживание настройте как план, чтобы база не разрасталась снова.