Чистим и ужимаем базу 1С: от анализа до сжатия файла

· 9 мин

Содержание

Если база 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. ищет ссылки на помеченные объекты;
  2. удаляет те, на которые никто не ссылается, а «неудаляемые» показывает списком с указанием, кто мешает.

Если объект не удаляется — значит, на него ссылается документ или другой элемент. Снимите ссылку (перепроведите или отредактируйте документ-источник) и повторите.

В Конфигураторе та же операция вызывается через Администрирование → Удаление помеченных объектов. Разница в том, что конфигуратору нужен монопольный доступ ко всей базе, а обработка в 1С:Предприятии в типовых умеет работать в оперативном режиме, блокируя только удаляемые объекты.

Если помеченных объектов десятки тысяч (частая история после неудачного обмена или загрузки), удаление может идти часами. Запускайте его в нерабочее время и не прерывайте на этапе удаления — прерванный контроль ссылок оставит базу в неполном состоянии.

Перед удалением помеченных объектов
Выполнено: 0 / 1

Пересчёт итогов и групповое перепроведение

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

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

Отдельно — групповое перепроведение. Если в базе были сбои, ошибки обмена или ручные правки регистров, движения могли «разъехаться» с документами. Перепроведение восстанавливает движения по текущим правилам:

  • путь в типовых — Администрирование → Обслуживание → Проведение документов;
  • задайте период и список видов документов;
  • запускайте по возрастанию даты, иначе последовательность взаиморасчётов и партий собьётся.

Само по себе перепроведение базу не уменьшает — оно приводит движения в порядок. А вот пересчёт итогов после чистки регистров реально сокращает итоговые таблицы.

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

Свёртка — самый мощный способ уменьшить базу. Идея простая: старые документы и движения за закрытые годы удаляются, а вместо них на начало нового периода вводятся документы ввода остатков. База теряет историю до даты свёртки, но резко худеет.

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

  1. выбираете дату — всё, что строго до неё, сворачивается;
  2. обработка формирует остатки по регистрам на эту дату и создаёт документы ввода остатков;
  3. старые движения и, по вашему выбору, сами документы удаляются;
  4. свёрнутый результат сверяется с оборотно-сальдовой ведомостью до свёртки.

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

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

Каким способом уменьшать именно вашу базу?

Сжатие файла базы: файловый режим, 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 для серверной.
Можно ли чистить журнал регистрации без риска для учёта?
Да. Журнал хранит только историю действий пользователей и не влияет на документы, проводки и остатки. Удаление старых записей учётные данные не затрагивает.
Свёртка или удаление старых документов — что выбрать?
Вручную удалять документы по одному опасно: нарушатся остатки и последовательности. Свёртка делает это корректно — формирует остатки на дату и вводит их документами. Для уменьшения базы по старым годам выбирайте свёртку, но только на копии.
Нужно ли сжимать базу PostgreSQL или MS SQL регулярно?
Нет. Регулярный shrink фрагментирует данные, и файл снова разрастается при первой же записи. Сжимайте разово после крупной чистки или свёртки, а место для текущей работы оставляйте в запасе.
Поможет ли облегчение базы от медленной работы?
Частично. Если тормоза от раздутых итогов и помеченных объектов — да. Но если дело в нехватке памяти СУБД, устаревшей статистике или неоптимальных запросах, уменьшение размера само по себе скорость не вернёт — нужна настройка СУБД и индексов.