База 1С разрослась: что удалить, что сжать и как не дать ей вырасти снова

· 10 мин

Содержание

Чтобы уменьшить объём базы 1С, сначала удалите лишние данные (помеченные объекты, старые версии объектов, файлы, хвосты регистрации обмена), а потом верните освободившееся место на диск. В файловой базе это делает Конфигуратор: Администрирование → Тестирование и исправление с флажком «Сжатие таблиц информационной базы». В клиент-серверной базе место возвращают средствами СУБД: DBCC SHRINKFILE в MS SQL или VACUUM FULL в PostgreSQL.

Порядок здесь принципиален. Сжатие без очистки даёт 5–15%, потому что выбрасывает только пустые страницы. Очистка без сжатия не уменьшает файл вообще: освободившиеся страницы остаются внутри 1Cv8.1CD и ждут новых данных.

1. Сначала найдите, что именно раздуло базу

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

Файловая база

Откройте каталог базы и посмотрите размеры:

  • 📁 1Cv8.1CD — сами данные и конфигурация;
  • 📁 папка 1Cv8Log — журнал регистрации. Он хранится рядом, а не внутри 1Cv8.1CD, но часто весит больше самой базы;
  • 📁 тома с файлами, если в программе включено хранение файлов на диске.

Если 1Cv8Log занимает 20 ГБ при базе в 3 ГБ, вопрос «как уменьшить базу» на самом деле про журнал регистрации.

Какие таблицы самые тяжёлые

В клиент-серверной базе размер таблиц покажет сама СУБД. Для MS SQL:

SELECT t.name AS table_name,
       SUM(a.total_pages) * 8 / 1024 AS size_mb
FROM sys.tables t
JOIN sys.indexes i ON t.object_id = i.object_id
JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY t.name
ORDER BY size_mb DESC;

Для PostgreSQL:

SELECT relname,
       pg_size_pretty(pg_total_relation_size(relid)) AS size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;

Имена таблиц будут служебными: _InfoRg1234, _AccumRg567, _Reference89. Чтобы понять, какой объект 1С за ними стоит, используйте метод встроенного языка ПолучитьСтруктуруХраненияБазыДанных(). Он возвращает соответствие «имя таблицы → метаданные». Удобнее всего вызвать его во внешней обработке или в консоли запросов, у которой есть режим выполнения кода.

Частые виновники

Что разрослосьКак узнатьГде чистить
Журнал регистрацииБольшая папка 1Cv8LogКонфигуратор, настройка журнала
История версий объектовТяжёлый регистр версий объектовНастройки истории изменений
Присоединённые файлыТяжёлые таблицы хранилища файловПеренос файлов в тома на диске
Регистрация изменений обменаТяжёлые таблицы с ChngR в имениУзлы планов обмена
Документы за много летРавномерно тяжёлые регистры и документыСвёртка или новая база с остатками

Таблицы с ChngR в имени — это записи об изменениях, которые ждут отправки в другой узел обмена. Если узел давно мёртв, они копятся годами.

2. Очистка в пользовательском режиме 1С:Предприятие

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

Перед любой очисткой сделайте резервную копию: выгрузку .dt или копию каталога файловой базы. Удаление помеченных и свёртка необратимы.

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

В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11): Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов.

  1. Запустите обработку в режиме выборочного удаления и посмотрите список.
  2. Объекты, на которые есть ссылки, программа не удалит, а покажет, кто ссылается.
  3. Разберите ссылки или снимите пометку с объектов, которые на самом деле нужны.

Помеченные документы обычно весят немного. Но в базах после неудачных загрузок из банка или обменов бывает по 50–100 тысяч помеченных объектов — тогда эффект заметный.

Присоединённые файлы

Сканы, договоры и вложения ЭДО по умолчанию могут лежать прямо в базе. Это самый быстрый способ раздуть файловую базу до 10+ ГБ.

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

Тома на диске нужно включить в резервное копирование отдельно. Выгрузка .dt их не содержит.

Свёртка базы

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

Альтернатива свёртке — начать новую базу с переносом остатков, а старую оставить как архив только для чтения. Для баз старше 7–8 лет это часто чище и быстрее.

3. История изменений, журнал регистрации и обмены

Эти три источника не видны пользователю в списках документов, поэтому про них вспоминают последними. А весят они больше всего.

История версий объектов

Если включено версионирование, при каждой записи документа или справочника сохраняется его полная копия. Документ, который перепроводили 30 раз, хранится в 30 экземплярах.

  1. Откройте Администрирование → Общие настройки и найдите настройки истории изменений.
  2. Отключите версионирование для объектов, где история не нужна: например, для справочника номенклатуры при автоматической загрузке прайсов.
  3. Задайте срок хранения устаревших версий (например, год).
  4. Проверьте, что регламентное задание очистки устаревших версий объектов включено, и запустите его вручную.

Журнал регистрации

Журнал чистится из Конфигуратора: Администрирование → Настройка журнала регистрации.

  • 📉 Уровень регистрации. Для большинства баз достаточно уровня «Ошибки» или «Предупреждения». Уровень «Все события» пишет каждый вход и каждую запись.
  • ✂️ Сокращение журнала. Кнопка Сократить удаляет события до указанной даты. Удаляемую часть можно сохранить в отдельный файл — так поступают, если журнал нужен для разбора инцидентов.
  • 🗂 Деление на периоды. Журнал делится на файлы по дням, месяцам или годам. С делением по месяцам старые файлы проще архивировать.

В клиент-серверной базе журнал лежит на сервере 1С, в каталоге кластера, в папке базы по её GUID. Он не входит в размер базы в СУБД, но занимает диск сервера.

Регистрация изменений в планах обмена

Если когда-то настраивали обмен с розницей, торговлей или мобильным приложением, а потом отказались, узел мог остаться. Программа продолжает регистрировать для него каждое изменение.

  1. Откройте Администрирование → Синхронизация данных и посмотрите список настроенных синхронизаций.
  2. Неиспользуемую синхронизацию удалите штатно: при удалении узла записи регистрации для него удаляются.
  3. Для живых узлов проверьте, что обмен действительно проходит: при успешном приёме подтверждения регистрация очищается.

4. Сжатие таблиц файловой базы в Конфигураторе

После очистки файл 1Cv8.1CD остаётся прежнего размера. Чтобы вернуть место, нужно сжатие.

Что проверить перед стартом

  • 🔒 Монопольный доступ: тестирование и исправление требует, чтобы в базе не было пользователей. Сеансы, включая фоновые задания и обмены, придётся завершить — предупредите людей заранее.
  • 💾 Свободное место на диске не меньше размера базы: при обработке создаются временные данные.
  • 📦 Свежая резервная копия: копия каталога или выгрузка .dt.

Пошагово

  1. Запустите Конфигуратор и откройте базу.
  2. Меню Администрирование → Тестирование и исправление.
  3. Отметьте «Сжатие таблиц информационной базы».
  4. Другие флажки (реиндексация, проверка логической и ссылочной целостности) включайте, только если есть повод: они дольше и могут исправлять данные.
  5. Нажмите Выполнить и дождитесь сообщения о завершении.

На базе в 10 ГБ сжатие на SSD занимает от нескольких минут до получаса.

Если внутри было много свободных страниц, выгрузка в .dt и загрузка в новый пустой каталог даёт тот же эффект: файл собирается заново, без пустот. Заодно проверяется, что выгрузка вообще читается.

Утилита chdbfl.exe

В каталоге bin платформы лежит chdbfl.exe — проверка физической целостности файловой базы. Она не уменьшает объём, но её стоит запустить, если Конфигуратор падает при сжатии: повреждённые страницы мешают пересборке таблиц. Перед запуском закройте все сеансы.

5. Как уменьшить объём базы 1С на MS SQL и PostgreSQL

В клиент-серверном варианте флажок сжатия в Конфигураторе не решает задачу. Файлами данных управляет СУБД, и место возвращают её средствами.

MS SQL Server: файл данных и журнал транзакций

Сначала посмотрите, что большое: .mdf (данные) или .ldf (журнал транзакций). Чаще всего раздут именно .ldf.

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

Варианты решения:

  • если восстановление на момент времени не нужно — переведите базу в модель SIMPLE;
  • если нужно — настройте регулярное резервное копирование журнала транзакций в плане обслуживания.

После этого журнал можно уменьшить:

USE [buh_base];
ALTER DATABASE [buh_base] SET RECOVERY SIMPLE;
DBCC SHRINKFILE (N'buh_base_log', 1024);  -- до ~1 ГБ

Логическое имя файла журнала смотрите в свойствах базы в SQL Server Management Studio, оно не всегда совпадает с именем базы.

Файл данных ужимают так же, DBCC SHRINKFILE с логическим именем файла данных. Но после этого обязательно перестройте индексы: сжатие файла данных сильно фрагментирует их, и запросы 1С замедляются.

Не включайте AUTO_SHRINK и не ставьте сжатие в ежедневный план обслуживания. База снова вырастет, файл будет расти и сжиматься по кругу, а индексы — постоянно фрагментированы.

Дополнительно можно включить сжатие данных на уровне страниц (DATA_COMPRESSION = PAGE) для самых тяжёлых таблиц. Начиная с SQL Server 2016 SP1 оно доступно и в редакции Standard. Это экономит место ценой нагрузки на процессор, решение принимает администратор СУБД.

PostgreSQL

В PostgreSQL удалённые строки не исчезают сразу, а остаются «мёртвыми» до очистки. Обычный VACUUM (и автоочистка) делает место доступным для повторного использования, но размер файлов почти не меняет.

Вернуть место на диск может VACUUM FULL:

VACUUM FULL VERBOSE _inforg1234;

Или для всей базы из командной строки:

vacuumdb --full --analyze -d buh_base -U postgres

VACUUM FULL блокирует таблицу полностью на всё время работы. Пользователи 1С не смогут ни читать, ни писать в неё. Запускайте его в окно обслуживания, после завершения сеансов, и только на таблицах, где после очистки действительно много мёртвых строк.

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

6. Регламентное обслуживание, чтобы база снова не выросла

Разовое сжатие без изменения настроек даёт результат на полгода. Дальше база возвращается к прежнему размеру.

Что настроитьГдеКак часто
Очистка устаревших версий объектовРегламентное задание в программеРаз в неделю, автоматически
Уровень и деление журнала регистрацииКонфигураторОдин раз, затем сокращение раз в квартал
Хранение файлов в томахАдминистрирование → Общие настройкиОдин раз
Контроль узлов обменаАдминистрирование → Синхронизация данныхРаз в месяц
Сжатие таблиц файловой базыКонфигураторРаз в 3–6 месяцев, после крупных удалений
Резервные копии журнала транзакций MS SQLПлан обслуживания СУБДЕжедневно или чаще
Перестроение индексов и обновление статистикиПлан обслуживания СУБДЕженедельно
Регламент на квартал
Выполнено: 0 / 6

Записывайте размер базы после каждого обслуживания. Если за месяц она выросла на 30%, а документов прибавилось на 5%, ищите новый источник — чаще всего это включённый кем-то уровень журнала «Все события» или новый обмен.

7. Ошибки, из-за которых чистка не помогает или вредит

  • ❌ Удалить строки прямо в таблицах СУБД. Запрос DELETE в обход 1С нарушает ссылочную целостность: документы потеряют движения, в отчётах появятся «битые» ссылки. Чистка — только средствами 1С.
  • ❌ Сжимать файловую базу при работающих пользователях. Конфигуратор не начнёт тестирование без монопольного доступа, а попытки «выгнать» сеансы снятием процессов в диспетчере задач могут повредить файл.
  • ❌ Удалить папку 1Cv8Log целиком. Это сработает, но вы потеряете историю, нужную для разбора инцидентов. Надёжнее сократить журнал с сохранением удаляемой части в файл.
  • ❌ Сжать файл данных MS SQL и не перестроить индексы. База станет меньше и заметно медленнее.
  • ❌ Свёртка без проверки остатков. Перед свёрткой сформируйте оборотно-сальдовую ведомость на дату свёртки, после — ещё раз и сравните.

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

Есть ли предел размера файловой базы 1С?
Формального ограничения, которое встретится на практике, нет. Но после 5–10 ГБ и 5+ одновременных пользователей файловая база заметно тормозит, и разумнее перейти на клиент-серверный вариант.
Почему после удаления помеченных размер файла 1Cv8.1CD не изменился?
Файловая база не возвращает место на диск автоматически. Освободившиеся страницы остаются внутри файла. Уменьшить его можно сжатием таблиц в Конфигураторе или выгрузкой и загрузкой .dt.
Уменьшит ли объём выгрузка и загрузка .dt в клиент-серверной базе?
Да, таблицы будут созданы заново и без пустот. Но это долго, требует монопольного доступа и места под временные файлы, поэтому для больших баз удобнее штатные средства СУБД.
Сколько места можно освободить?
Зависит от источника. Перенос присоединённых файлов в тома и очистка версий объектов часто уменьшают базу в 2–3 раза. Одно сжатие без очистки обычно даёт 5–15%.
Влияет ли размер базы на скорость обновления конфигурации?
Да. Обновление с реструктуризацией перестраивает таблицы изменённых объектов, и чем они больше, тем дольше идёт обновление. Это ещё один довод чистить базу перед крупным обновлением.