Рано или поздно любой системный администратор или программист 1С сталкивается с проблемой стремительного роста журнала регистрации. Когда файл логов 1Cv8.lgd достигает внушительных размеров (например, 12 ГБ и более), это начинает сказываться на стабильности работы всей системы. Чтение журнала через Конфигуратор превращается в мучение из-за сильных зависаний, а дисковое пространство на сервере начинает таять на глазах.
В этой статье мы подробно разберем, почему стандартные средства платформы не помогают физически уменьшить размер файла нового формата, как правильно сжать журнал регистрации средствами СУБД SQLite, как выполнить быструю ротацию и почему в некоторых случаях имеет смысл вернуться к старому формату ведения логов.
Давайте проанализируем, как ведет себя платформа 1С при попытке сократить журнал регистрации через стандартное меню: Администрирование — Настройка журнала регистрации — Сократить. Мы можем задать дату, до которой нужно очистить логи, и даже указать файл для записи удаляемых событий. Платформа действительно удалит эти записи из базы данных журнала регистрации.
Однако, посмотрев на файл 1Cv8.lgd в проводнике Windows, мы обнаружим, что его физический размер на диске остался прежним — все те же 12 ГБ. Выясним причину такого поведения.
Начиная с версии 8.3.5, по умолчанию используется новый формат журнала регистрации, который представляет собой базу данных SQLite. Архитектура СУБД SQLite спроектирована таким образом, что при удалении строк из таблиц освободившееся место не возвращается операционной системе автоматически. Эти страницы памяти помечаются как свободные (free list) внутри самого файла и будут использоваться для записи новых событий журнала регистрации. Сделано это из соображений производительности, чтобы СУБД не тратила лишние ресурсы на постоянное изменение физического размера файла на диске.
Таким образом, простое нажатие кнопки в Конфигураторе удаляет старые записи, но не освобождает дисковое пространство.
Чтобы физически вернуть освободившееся место операционной системе после сокращения логов, необходимо выполнить операцию дефрагментации базы данных SQLite. В СУБД эта операция называется VACUUM. Рассмотрим по шагам, как выполнить сжатие файла на сервере.
Важное предупреждение: в процессе выполнения команды VACUUM утилита создает временную копию базы данных. Это означает, что для успешного сжатия файла объемом 12 ГБ на вашем жестком диске должно быть свободно не менее 12 ГБ дополнительного места. Также помните, что на время выполнения операции база данных журнала регистрации будет заблокирована.
Выполним следующие действия:
1Cv8.lgd в резервный каталог на случай непредвиденного сбоя. Каталог журнала регистрации серверной базы обычно находится по пути:C:\Program Files\1cv8\srvinfo\reg_xxxx\Идентификатор_Базы\1Cv8Logsqlite3.exe с сайта разработчиков SQLite. Это бесплатный исполняемый файл, не требующий установки. Поместите его в папку с файлом логов или укажите к нему путь в командной строке.sqlite3.exe 1Cv8.lgd "VACUUM;"
1Cv8.lgd — теперь его объем будет соответствовать реальному количеству записей в журнале.Если старые записи журнала регистрации вам не требуются в оперативной работе, или вы уже перенесли файл объемом 12 ГБ в надежное архивное хранилище, самым быстрым способом будет создание абсолютно чистого файла логов. Для этого выполним простую процедуру:
1Cv8.lgd в архивное имя, например, 1Cv8_2025_backup.lgd.1Cv8.lgd минимального размера.При необходимости просмотреть архивные записи вы всегда сможете открыть переименованный файл через Конфигуратор с помощью меню Файл — Открыть.
Многие опытные администраторы 1С предпочитают отказаться от нового формата СУБД SQLite и вернуть старый последовательный формат логов. Начиная с версии платформы 8.3.12, сама фирма 1С снова сделала старый формат рекомендуемым по умолчанию, так как новый sqlite-формат показал нестабильную работу и падение производительности записи при высокой интенсивности транзакций.
Главный плюс старого формата заключается в том, что он разбивает данные на множество небольших файлов по периодам (например, по дням или месяцам) с расширением .lgp. Управлять такими логами невероятно просто: устаревшие файлы можно безболезненно удалять или перемещать в архив средствами операционной системы прямо «на лету», без остановки сервера 1С.
Разберем по шагам, как переключить базу на использование старого формата:
.../srvinfo/reg_xxxx/Идентификатор_Базы/1Cv8Log.1Cv8.lgd в архив или удалите его.1Cv8.lgf. Обратите внимание на расширение — оно должно быть именно .lgf.1Cv8.lgf и начнет вести логи по старой схеме, создавая вложенную папку со множеством файлов .lgp.Если вы решили остаться на новом формате SQLite (файлы .lgd), ручное сжатие раз в месяц быстро надоест. Лучшим решением будет настройка автоматического обслуживания в ночное время с помощью скрипта автоматизации. Напишем простой пакетный сценарий (батник), который можно запускать через Планировщик задач Windows.
Сценарий выполняет следующие действия: производит программное сокращение журнала средствами конфигуратора 1С, останавливает службу сервера, сжимает базу SQLite и запускает службу обратно.
Рассмотрим пример такого скрипта:
@echo off
rem Путь к утилите SQLite и исполняемому файлу 1С
set SQLITE_EXE="C:\Tools\sqlite3.exe"
set ONEC_EXE="C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"
rem Пути к базам данных и файлу журнала
set DB_PATH="C:\Program Files\1cv8\srvinfo\reg_1541\UUID-вашей-базы\1Cv8Log\1Cv8.lgd"
set CONNECTION_STR=/S"SERVER-1C\WorkDB" /N"Администратор" /P"Пароль"
rem Шаг 1: Программное сокращение журнала средствами 1С (удаляем записи старше 30 дней)
%ONEC_EXE% DESIGNER %CONNECTION_STR% /ReduceEventLogSize %DATE-30% -saveAs "C:\Backup\Logs\log_old.lgd"
rem Шаг 2: Остановка службы Агента 1С
net stop "1C:Enterprise 8.3 Server Agent"
timeout /t 10 /nobreak
rem Шаг 3: Сжатие физического файла базы SQLite
%SQLITE_EXE% %DB_PATH% "VACUUM;"
rem Шаг 4: Запуск службы Агента 1С обратно
net start "1C:Enterprise 8.3 Server Agent"
Использование подобных скриптов автоматизации позволит вам навсегда забыть о проблеме переполнения диска файлами 1Cv8.lgd и сохранит высокую скорость работы СУБД при чтении журнала регистрации вашими пользователями.