Уменьшаем размер базы 1С: сжатие таблиц, чистка данных и обслуживание СУБД
Содержание
Файловую базу
1С сжимают в конфигураторе: Администрирование → Тестирование и исправление, флажок «Сжатие таблиц информационной базы», режим «Тестирование и исправление» и кнопка «Выполнить». Второй надёжный способ — выгрузить базу
в файл .dt и загрузить обратно: файл 1Cv8.1CD пересобирается без пустых страниц.
Клиент-серверную базу
средствами 1С не сжимают — это работа СУБД: DBCC SHRINKFILE в MS SQL Server и VACUUM FULL в PostgreSQL. И в обоих вариантах сжатие освобождает только пустое место. Чтобы база реально похудела, сначала удаляют лишние данные, а потом уже сжимают.
Почему база 1С разрастается и сама не уменьшается
Файл 1Cv8.1CD устроен постранично. Когда вы удаляете документы, страницы помечаются как свободные, но файл на диске остаётся прежнего размера. Новые данные со временем занимают эти дыры, а излишек так и висит.
Основные источники роста:
- 📄 Документы и движения за много лет. Каждый проведённый документ пишет строки в регистры. Пять лет учёта в средней фирме — это миллионы записей.
- 🗑️ Объекты, помеченные на удаление, но не удалённые. Пометка не удаляет запись, она просто ставит флаг.
- 🕓 История изменений (версии объектов). В конфигурациях на БСП каждая запись документа может сохранять копию. Если хранить версии бессрочно, их объём легко обгоняет сами документы.
- 📎 Файлы, прикреплённые к объектам. Сканы договоров и счетов по умолчанию часто хранятся внутри базы.
- 🔄 Служебные данные обменов. Регистрации изменений для узлов, которые давно не работают, копятся без ограничений.
- 🧱 Фрагментация после массовых операций. Перепроведение за год, загрузка данных, удаление — всё это оставляет свободные страницы.
Журнал регистрации в файловой базе лежит не в 1Cv8.1CD, а в соседней папке 1Cv8Log. Его размер на сжатие таблиц не влияет, но место на диске он занимает, иногда десятки гигабайт.
Подготовка базы 1С к сжатию
Сжатие таблиц и загрузка .dt переписывают файл базы целиком. Сбой посреди процесса (отключили свет, кончилось место) может оставить базу в нерабочем виде.
Перед сжатием обязательно сделайте резервную копию и проверьте, что она открывается.
Порядок подготовки:
- Предупредите пользователей и выберите время, когда в базе никого нет. Для сжатия нужен монопольный доступ: все сеансы будут завершены.
- Сделайте копию. Для файловой базы самое простое — скопировать всю папку базы целиком, пока база закрыта. Дополнительно можно выгрузить
.dtчерезАдминистрирование → Выгрузить информационную базу. - Проверьте место на диске. Свободного места должно быть не меньше текущего размера базы: во время пересборки данные временно занимают его повторно.
- Запишите исходный размер
1Cv8.1CD, чтобы потом оценить эффект. - Если база вела себя странно (ошибки чтения, вылеты), сначала проверьте физическую целостность файла утилитой
chdbfl.exeиз папкиbinплатформы.
Если в базе несколько пользователей работают удалённо, установите блокировку начала сеансов заранее. В типовых конфигурациях это делается в Администрирование → Обслуживание через блокировку работы пользователей.
Как сжать файловую базу 1С: три способа
Способ 1. Сжатие таблиц в конфигураторе
Это штатный и самый безопасный путь.
- Запустите базу в режиме «Конфигуратор» под пользователем с полными правами.
- Откройте
Администрирование → Тестирование и исправление. - Снимите лишние флажки и оставьте «Сжатие таблиц информационной базы». Можно дополнительно включить «Реиндексация таблиц информационной базы» — это тоже полезно для скорости.
- Режим выберите «Тестирование и исправление».
- Нажмите «Выполнить» и дождитесь сообщения о завершении.
На базе в 10–20 ГБ процесс идёт от нескольких минут до часа, в зависимости от диска. На SSD заметно быстрее.
Не отмечайте «Пересчёт итогов» и «Проверка логической и ссылочной целостности» без нужды. Они долгие, а проверка ссылочной целостности при неправильно выбранных действиях может создать объекты-заглушки или удалить ссылки.
Способ 2. Выгрузка в .dt и загрузка обратно
При загрузке .dt база создаётся заново, поэтому пустого места в ней не остаётся совсем. Это работает даже там, где сжатие таблиц дало мало.
- В конфигураторе:
Администрирование → Выгрузить информационную базу, сохраните файл.dt. - Создайте рядом новую пустую папку.
- Лучше загружать в новую базу, а не поверх старой: добавьте в список баз новую пустую базу в этой папке, откройте её конфигуратором.
Администрирование → Загрузить информационную базу, выберите сохранённый.dt.- Проверьте новую базу, сравните остатки по ключевым счетам и только после этого удалите старую.
Плюс способа — старая база цела до последнего шага. Минус — нужно место на две базы и файл выгрузки.
Способ 3. Сжатие из командной строки
Тот же механизм, что в способе 1, но без ручных кликов. Удобно для планировщика заданий.
@echo off
set V8="C:\Program Files\1cv8\8.3.25.1374\bin\1cv8.exe"
set BASE="D:\Bases\Buh"
set LOG="D:\Logs\compress.log"
%V8% DESIGNER /F %BASE% /N "Администратор" /P "пароль" /IBCheckAndRepair -IBCompression -ReIndex /Out %LOG% /DisableStartupDialogs
Номер версии в пути замените на свой — посмотрите папки в C:\Program Files\1cv8\. Результат пишется в файл из параметра /Out, его стоит открыть после первого запуска.
Сравнение способов
| Способ | Когда подходит | Риски и ограничения |
|---|---|---|
| Сжатие таблиц в конфигураторе | Регулярное обслуживание, после удаления данных | Нужен монопольный доступ |
Выгрузка и загрузка .dt | Сжатие дало мало, нужна «чистая» пересборка | Нужно место на две базы, долго на больших базах |
Командная строка /IBCheckAndRepair | Автоматизация по ночам | Пароль в файле, нужно следить за логом |
Сжатие базы 1С на MS SQL Server и PostgreSQL
В клиент-серверном варианте данные лежат в файлах СУБД. Пункт «Сжатие таблиц» в конфигураторе здесь не поможет: сжимать нужно на стороне сервера баз данных.
MS SQL Server
Чаще всего разрастается не файл данных (.mdf), а журнал транзакций (.ldf). Причина обычно одна: база в модели восстановления FULL, а резервное копирование
журнала не настроено. Журнал растёт до тех пор, пока не кончится диск.
Что делать:
- В SQL Server Management Studio откройте свойства базы, вкладка
Options, посмотритеRecovery model. - Если точка-в-момент восстановление вам не нужна, переключите на
Simple. Если нужна — настройте регулярный бэкап журнала, тогда он перестанет расти. - Сожмите журнал:
USE [buh_base];
GO
-- узнать логические имена файлов
SELECT name, type_desc, size/128 AS size_mb FROM sys.database_files;
GO
-- сжать журнал до 1024 МБ
DBCC SHRINKFILE (N'buh_base_log', 1024);
GO
- Файл данных сжимайте только если удалили много данных и место действительно нужно:
DBCC SHRINKFILE (N'buh_base', <целевой размер в МБ>).
Сжатие файла данных сильно фрагментирует индексы. После него обязательно перестройте индексы (ALTER INDEX ALL ON ... REBUILD или задача «Rebuild Index» в плане обслуживания), иначе 1С начнёт тормозить. Регулярный SHRINK файла данных по расписанию — вредная практика.
PostgreSQL
В PostgreSQL удалённые и изменённые строки остаются в таблицах как «мёртвые» до очистки. Обычный VACUUM (и autovacuum) делает место доступным для повторного использования, но размер файлов не уменьшает. Физически вернуть место системе может VACUUM FULL.
-- обычная очистка и обновление статистики, без блокировки работы
VACUUM ANALYZE;
-- полная пересборка таблиц с возвратом места на диск
VACUUM FULL ANALYZE;
VACUUM FULL берёт на каждую таблицу исключительную блокировку: пользователи 1С на это время не смогут работать с базой. Запускайте его только в окно обслуживания, когда сеансы завершены, и при свободном месте на диске не меньше размера самой большой таблицы.
Проверить, что autovacuum вообще включён, можно запросом SHOW autovacuum; — он должен вернуть on.
Удаление старых данных и очистка журнала регистрации
Сжатие убирает пустоту. Если пустоты нет, база не уменьшится. Поэтому сначала освобождают место внутри.
Помеченные на удаление объекты
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) обработка находится в Администрирование → Обслуживание → Удаление помеченных объектов. Она проверяет ссылки и удаляет только то, на что больше ничего не ссылается. Запускайте её перед сжатием.
История изменений объектов
Если включено версионирование, задайте срок хранения версий в настройках истории изменений (раздел Администрирование → Общие настройки). После этого регламентное задание очистки устаревших версий удалит лишнее. На базах с многолетней бессрочной историей это нередко даёт больше, чем удаление документов.
Файлы внутри базы
Переведите хранение присоединённых файлов в тома на диске. Настройка находится в разделе администрирования, в группе параметров работы с файлами. Уже загруженные файлы можно перенести в тома штатной командой переноса — после этого база уменьшается на их объём.
Журнал регистрации
Журнал не входит в 1Cv8.1CD, но его сокращают тоже из конфигуратора:
Администрирование → Настройка журнала регистрации.- Кнопка «Сократить», укажите дату, до которой удалить записи .
- При желании поставьте флажок сохранения удаляемых записей в отдельный файл.
В той же форме выберите уровень регистрации. Для большинства баз достаточно «Регистрировать ошибки и предупреждения»; режим «все события» на активной базе быстро набирает гигабайты.
Журнал бывает в двух форматах: старый — набор файлов .lgp с индексом .lgf, новый — одна база 1Cv8.lgd. Новый удобнее чистить, но сокращение в обоих случаях делается одной кнопкой из конфигуратора.
Свёртка базы
Если документы старых лет больше не нужны в рабочей базе, применяют свёртку: документы до выбранной даты удаляются, а на их место создаются документы ввода остатков. В Бухгалтерии 3.0 команда свёртки находится среди обработок раздела Администрирование → Обслуживание.
Свёртка необратима. Перед ней сделайте отдельный архив базы и сохраните его как «архив до даты свёртки». Закрытые налоговые периоды должны быть проверены и сданы.
Узлы обмена
Если база когда-то обменивалась с другой базой, которая уже не используется, удалите неактивный узел плана обмена или зарегистрированные для него изменения. Иначе каждая запись документа добавляет строку в регистрацию изменений.
Автоматическое обслуживание базы по расписанию
Разовое сжатие помогает, но через год база снова набирает вес. Лучше настроить регулярное обслуживание.
Регламентные задания 1С
В конфигурациях на БСП: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Здесь проверьте, что включены задания, связанные с очисткой: удаление устаревших версий объектов, очистка служебных данных, удаление помеченных объектов (если вы готовы к автоматическому удалению). Откройте каждое и посмотрите расписание — разумно ставить ночное время.
В файловой базе регламентные задания выполняются, только пока кто-то работает в базе (клиент запускает их сам). Если ночью никого нет, ночное расписание в файловой базе не сработает.
Сжатие файловой базы по расписанию
Bat-файл из способа 3 добавьте в планировщик заданий Windows:
- Откройте «Планировщик заданий» и создайте простую задачу.
- Триггер — еженедельно, например в воскресенье в 03:00.
- Действие — запуск программы, укажите ваш
.bat. - В свойствах задачи включите «Выполнять вне зависимости от регистрации пользователя».
Первой строкой в скрипте лучше копировать папку базы в архив: если что-то пойдёт не так, утром будет из чего восстановиться.
План обслуживания MS SQL Server
В SSMS: Management → Maintenance Plans. Типовой набор для базы 1С:
- 💾 полный бэкап ежедневно и бэкап журнала каждые 1–2 часа (для модели FULL);
- 🔧 перестроение или реорганизация индексов раз в неделю;
- 📊 обновление статистики ежедневно;
- 🧹 удаление старых файлов бэкапов.
Задачу Shrink Database в регулярный план не добавляйте: она каждый раз фрагментирует индексы, а файл всё равно вырастет снова.
В PostgreSQL достаточно не отключать autovacuum и раз в неделю делать VACUUM ANALYZE по крону; VACUUM FULL оставьте для разовых случаев после больших чисток.
Частые ошибки при сжатии базы
- ❌ Сжимают без чистки и ждут чуда. Если внутри нет свободных страниц, размер не изменится. Сначала удаление помеченных, версий, файлов.
- ❌ Удаляют журнал регистрации вручную при открытой базе. Удаление папки
1Cv8Logпри работающих сеансах приводит к ошибкам записи журнала. Сокращайте его кнопкой из конфигуратора. - ❌ Ставят SHRINK файла данных в ежедневный план SQL. База от этого медленнее, а не меньше.
- ❌ Загружают .dt поверх единственной копии. Если файл выгрузки битый, база будет потеряна. Загружайте в новую базу.
- ❌ Запускают сжатие по расписанию без проверки лога. Скрипт может месяцами падать на неверном пароле, а все думают, что обслуживание идёт.