Чистим и ужимаем базу 1С: от анализа до сжатия файла
Содержание
Если база 1С разрослась до десятков или сотен гигабайт, тормозит при открытии списков и долго закрывает месяц, лечится это не покупкой нового сервера, а чисткой. Размер почти всегда раздувают три вещи: помеченные на удаление объекты, старые движения регистров и журнал регистрации.
Порядок работ один для всех: сначала понять, что именно весит, потом удалить лишнее логически, и только в конце физически сжать файл базы. Если сделать наоборот — сжать сначала, — файл через неделю снова разбухнет.
Любое из действий ниже меняет данные. Перед свёрткой, удалением помеченных объектов и сжатием сделайте резервную копию базы и убедитесь, что из неё никто не работает. Операции обслуживания требуют монопольного (эксклюзивного) доступа, иначе платформа их не запустит.
Как понять, что именно утяжеляет базу
Начинать с чистки вслепую бессмысленно: в одной базе весь объём съедает журнал регистрации, в другой — присоединённые файлы, сложенные внутрь базы. Сначала измеряем.
В файловом режиме размер базы — это файл 1Cd (1Cv8.1CD) в каталоге информационной базы. Журнал регистрации лежит отдельно: это файл 1Cv8.lgd или папка 1Cv8Log рядом с ним. Сравните их размеры в проводнике — часто журнал оказывается больше самой базы.
В клиент-серверном варианте смотрите размер базы данных средствами СУБД:
- MS SQL Server — в SQL Server Management Studio свойства базы, вкладка с файлами, либо отчёт Disk Usage by Table;
- PostgreSQL — запросом к системным таблицам (
pg_total_relation_sizeпо таблицам) или через pgAdmin.
Отчёт по таблицам показывает главное — какие таблицы самые большие. Как правило, в топе оказываются:
- 🗂️ таблицы движений крупных регистров (
_AccumRg…,_AccRg…— остатки и обороты по складу, взаиморасчётам, бухгалтерии); - 📝 журнал регистрации;
- 📎 таблицы хранилищ присоединённых файлов, если файлы хранятся в базе, а не в томах на диске;
- 🕑 таблицы версий объектов, если включено версионирование.
Эти четыре источника и разбираем дальше — каждый своим способом.
Удаление помеченных на удаление объектов
Пометка на удаление сама по себе ничего не удаляет: объект остаётся в базе, занимает место и продолжает попадать в выборки. Реальное удаление — отдельная процедура с контролем ссылок.
В режиме 1С:Предприятие (типовые конфигурации на БСП — Бухгалтерия, ЗУП, УТ) откройте Администрирование → Обслуживание → Удаление помеченных объектов. Процедура работает в два прохода:
- ищет ссылки на помеченные объекты;
- удаляет те, на которые никто не ссылается, а «неудаляемые» показывает списком с указанием, кто мешает.
Если объект не удаляется — значит, на него ссылается документ или другой элемент. Снимите ссылку (перепроведите или отредактируйте документ-источник) и повторите.
В Конфигураторе та же операция вызывается через Администрирование → Удаление помеченных объектов. Разница в том, что конфигуратору нужен монопольный доступ ко всей базе, а обработка в 1С:Предприятии в типовых умеет работать в оперативном режиме, блокируя только удаляемые объекты.
Если помеченных объектов десятки тысяч (частая история после неудачного обмена или загрузки), удаление может идти часами. Запускайте его в нерабочее время и не прерывайте на этапе удаления — прерванный контроль ссылок оставит базу в неполном состоянии.
Пересчёт итогов и групповое перепроведение
Регистры накопления и бухгалтерии хранят не только движения, но и предрассчитанные итоги — таблицы остатков и оборотов на конец каждого периода. Со временем они раздуваются и начинают тормозить любые отчёты по остаткам.
Лечится это пересчётом итогов. Откройте Все функции → Стандартные → Управление итогами (пункт «Все функции» включается в настройках программы, если он скрыт). Здесь задаётся период рассчитанных итогов: обычно его ставят на конец прошлого или текущего месяца. Итоги за более поздние даты пересчитываются «на лету», а лишние строки из итоговых таблиц уходят.
Отдельно — групповое перепроведение. Если в базе были сбои, ошибки обмена или ручные правки регистров, движения могли «разъехаться» с документами. Перепроведение восстанавливает движения по текущим правилам:
- путь в типовых —
Администрирование → Обслуживание → Проведение документов; - задайте период и список видов документов;
- запускайте по возрастанию даты, иначе последовательность взаиморасчётов и партий собьётся.
Само по себе перепроведение базу не уменьшает — оно приводит движения в порядок. А вот пересчёт итогов после чистки регистров реально сокращает итоговые таблицы.
Свёртка базы: удаление старых движений и документов
Свёртка — самый мощный способ уменьшить базу. Идея простая: старые документы и движения за закрытые годы удаляются, а вместо них на начало нового периода вводятся документы ввода остатков. База теряет историю до даты свёртки, но резко худеет.
Свёртка выполняется специальной обработкой «Свёртка информационной базы». В части типовых она встроена в раздел обслуживания, в остальных берётся как внешняя обработка (её название в меню может отличаться). Логика обработки одинакова:
- выбираете дату — всё, что строго до неё, сворачивается;
- обработка формирует остатки по регистрам на эту дату и создаёт документы ввода остатков;
- старые движения и, по вашему выбору, сами документы удаляются;
- свёрнутый результат сверяется с оборотно-сальдовой ведомостью до свёртки.
Свёртка необратима. Сворачивайте только копию, убедитесь, что остатки после свёртки совпали с отчётами, и лишь потом переносите результат в рабочую базу. Если в базе ведётся налоговый учёт и нужны данные для проверок, храните несвёрнутую копию весь срок хранения документов.
Свёртку не делают каждый месяц. Разумная частота — раз в несколько лет, по закрытым и проверенным периодам. Если база нужна целиком для аналитики, свёртку заменяют архивной копией: рабочую чистят, полную историю держат отдельно.
Сжатие файла базы: файловый режим, MS SQL и PostgreSQL
После логической чистки место внутри файла освобождается, но сам файл не уменьшается — внутри остаются «дыры». Физически сжать его нужно отдельно, и способ зависит от того, где лежит база.
Файловый режим (.1CD). Запустите Конфигуратор, Администрирование → Тестирование и исправление. Отметьте пункты реструктуризации и сжатия таблиц информационной базы, режим — «только исправление». Платформа перестроит таблицы и вернёт свободное место операционной системе. Нужен монопольный доступ: все пользователи должны выйти.
MS SQL Server. Файл данных сжимается командой:
DBCC SHRINKDATABASE (N'ИмяБазы', 10);
Второй параметр — желаемый процент свободного места после сжатия. Отдельно сокращается журнал транзакций: сначала переведите базу в модель восстановления Simple или сделайте резервную копию журнала, затем сожмите лог-файл через DBCC SHRINKFILE.
PostgreSQL. Обычный VACUUM только помечает место свободным для повторного использования. Вернуть его на диск умеет:
VACUUM FULL;
VACUUM FULL в PostgreSQL и SHRINKDATABASE в MS SQL перезаписывают таблицы и ставят блокировки. Выполняйте их в окно обслуживания, когда в базе никого нет, иначе получите зависшие сеансы.
Про сжатие помните одно: делайте его разово после крупной чистки или свёртки, а не по расписанию. Регулярный shrink фрагментирует данные и заставляет СУБД снова раздувать файл при ближайшей записи — вы потратите ресурсы и ухудшите производительность.
После сжатия обязательно восстановите производительность, иначе база станет меньше, но не быстрее:
- 🔧 перестройте индексы — shrink и VACUUM FULL сильно их фрагментируют (в MS SQL —
ALTER INDEX … REBUILD, в PostgreSQL —REINDEX); - 📊 обновите статистику оптимизатора, чтобы запросы снова выбирали быстрые планы (в MS SQL —
UPDATE STATISTICS, в PostgreSQL —ANALYZE); - ⚙️ проверьте, что ночные регламентные задания СУБД по индексам и статистике включены — именно они держат скорость в повседневной работе.
Для файловой базы роль «обновления индексов» играет пункт реструктуризации в «Тестировании и исправлении» — он уже выполняется вместе со сжатием.
Чистка журнала регистрации и временных данных
Журнал регистрации пишет каждое действие пользователя. За годы работы он нередко обгоняет по размеру саму базу, при этом на учётные данные не влияет — его можно чистить смело.
Настраивается журнал в Конфигураторе: Администрирование → Настройка журнала регистрации. Здесь задаются две вещи:
- 🗓️ период разделения хранения (например, помесячно) — чтобы старое можно было удалять частями;
- 🧹 сокращение — удаление записей старше указанной даты.
Задайте разумную глубину хранения (3–6 месяцев для оперативного разбора проблем обычно достаточно) и сократите журнал до этой даты. В клиент-серверном варианте журнал настраивается так же.
Отдельная категория — временные данные:
- в MS SQL за временные таблицы отвечает база
tempdb; её размер регулируется настройками СУБД, а не чисткой 1С; - кэш клиента (временные файлы сеанса) к размеру базы отношения не имеет и чистится у клиента, а не в базе;
- присоединённые файлы, если они хранятся внутри базы, переносятся в тома хранения файлов на диске — после переноса таблицы хранилищ в базе освобождаются, а затем файл сжимается описанным выше способом.
Версии объектов (если включено версионирование) чистятся настройкой срока хранения версий в разделе администрирования — храните их ограниченный срок, иначе таблица версий растёт без предела.
Регламент: чтобы база не разрасталась снова
Разовая чистка даёт эффект на месяц-другой, если не навести порядок в регламентах. Минимальный набор, который держит базу в форме:
| Операция | Как часто | Где настроить |
|---|---|---|
| Удаление помеченных объектов | раз в неделю/месяц | регламентное задание или вручную |
| Пересчёт итогов | по закрытии периода | Управление итогами |
| Сокращение журнала регистрации | по расписанию | Настройка журнала регистрации |
| Обновление статистики СУБД | ежедневно ночью | средствами MS SQL / PostgreSQL |
| Резервное копирование | ежедневно | средствами СУБД или копированием файла |
| Свёртка | раз в несколько лет | на копии, по закрытым годам |
В типовых конфигурациях часть этих действий уже оформлена как регламентные задания — проверьте раздел обслуживания и включите нужные. Сжатие файла в регламент не ставят: его делают руками после крупной чистки.
Частые вопросы
После удаления помеченных объектов файл базы не уменьшился. Почему?
SHRINKDATABASE/VACUUM FULL для серверной.