При активной эксплуатации информационных баз 1С журнал регистрации быстро разрастается до десятков гигабайт. При выполнении штатной процедуры сокращения журнала (через Конфигуратор или вызовом метода платформы) администраторы часто сталкиваются с ситуацией, когда записи за выбранный период удалены, но физический размер файла 1Cv8.lgd на диске остался прежним. Разберем внутренние механизмы платформы, выясним причину такого поведения и рассмотрим проверенные способы уменьшения объема журнала регистрации.
Проанализируем архитектуру хранения данных. Начиная с платформы 1С:Предприятие 8.3, новый формат журнала регистрации реализован на базе компактной реляционной СУБД SQLite. Все события записываются в единый файл 1Cv8.lgd.
Когда мы выполняем штатное сокращение журнала, внутри базы данных SQLite происходит удаление строк таблиц. Однако архитектура СУБД устроена так, что освободившиеся страницы данных не возвращаются операционной системе. Они лишь помечаются как свободные внутри структуры самого файла базы данных. Это штатное поведение: при дальнейшей работе 1С будет повторно использовать эти зарезервированные блоки для записи новых событий, и файл не будет увеличиваться в размерах до тех пор, пока весь очищенный объем не заполнится новыми логами.
Если же дисковое пространство на сервере критически ограничено и требуется немедленно вернуть занятые гигабайты файловой системе, необходимо выполнить дефрагментацию и сжатие базы данных вручную либо пересмотреть подход к хранению журнала.
Рассмотрим основной способ физического уменьшения размера файла 1Cv8.lgd без потери оставшихся актуальных записей. Для этого используется штатная команда СУБД SQLite — VACUUM. Она перестраивает базу данных с нуля, копируя только полезные данные в новый временный файл, полностью исключая пустые страницы.
Разберем процесс выполнения процедуры по шагам:
database is locked). Для клиент-серверной базы останавливаем службу «Агент сервера 1С:Предприятия», для файловой базы — завершаем все пользовательские сеансы и фоновые задания.VACUUM создает полную временную копию базы данных. На диске должно быть доступно не менее 100% от текущего объема файла 1Cv8.lgd (например, если файл весит 22 ГБ, свободно должно быть минимум 22–25 ГБ).1Cv8.lgd-wal и 1Cv8.lgd-shm закрыты и их данные корректно сброшены в основной файл после остановки службы 1С.sqlite3.exe с официального сайта разработчика и помещаем в каталог с файлом журнала либо запускаем командную строку.
sqlite3.exe "C:\1Cv8Log\1Cv8.lgd" "VACUUM;"
Дожидаемся окончания процесса (для больших файлов размером свыше 20 ГБ операция может занять продолжительное время в зависимости от скорости дисковой подсистемы). После завершения размер файла 1Cv8.lgd уменьшится до реального объема содержащихся в нем данных. После этого запускаем службу сервера 1С.
На высоконагруженных базах выполнение команды VACUUM может приводить к недопустимо долгому простою системы. Если старые логи уже сохранены в архивный файл в процессе штатного сокращения, оптимально применить метод быстрой ротации:
1Cv8Log в каталоге базы данных или каталоге кластера серверов).1Cv8.lgd (вместе с файлами -wal и -shm, если они остались) в архивную папку или на резервный накопитель.1Cv8.lgd минимального начального размера.При возникновении необходимости расследования старых инцидентов архивный файл журнала можно открыть непосредственно в Конфигураторе через меню Файл — Открыть или подключить к тестовой копии базы.
Посмотрим на альтернативный вариант организации журнала, который предлагает платформа: разделенный текстовый формат (файлы с расширением .lgp и .lgf). В отличие от базы SQLite, текстовый журнал дробится на отдельные файлы по дням или месяцам.
Преимущества такого подхода:
.lgp из файловой системы без необходимости остановки сервера и процедур сжатия.Для смены формата перейдем в Конфигуратор, откроем меню Администрирование — Настройка журнала регистрации и нажмем кнопку изменения формата хранения событий. Процесс конвертации выполнится штатно средствами платформы.
Для предотвращения неконтролируемого разрастания журнала в будущем настроим регулярное обслуживание и скорректируем уровень детализации:
/ReduceEventLogSize через планировщик задач Windows для периодической отсечки устаревших записей по дате:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /S "ServerName\BaseName" /N "Admin" /P "Password" /ReduceEventLogSize 2024-01-01 /Out "C:\Logs\reduce.log"
Применяя данные методы обслуживания, мы сможем эффективно управлять размером файлов журнала регистрации и поддерживать оптимальный объем свободного места на сервере.