Как уменьшить и сжать файл журнала регистрации 1Cv8.lgd в 1С 8.3?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе активной работы пользователей журнал регистрации платформы «1С:Предприятие 8.3» нового формата (файл базы данных SQLite 1Cv8.lgd) быстро увеличивается в размерах, занимая десятки гигабайт на диске сервера. При этом системные администраторы часто сталкиваются с ситуацией: стандартная процедура сокращения журнала через Конфигуратор выполнена, старые записи удалены, но сам файл 1Cv8.lgd физически не уменьшается в объеме, а попытка сжать его утилитой SQLite завершается без результата. Разберем детально механизм работы журнала регистрации и рассмотрим эффективные способы решения этой проблемы.

Почему файл 1Cv8.lgd не уменьшается после стандартной обрезки

Проанализируем логику работы СУБД SQLite, на базе которой реализован журнал регистрации 1Cv8.lgd:

  1. Когда мы сокращаем журнал через Конфигуратор (меню «Администрирование» — «Настройка журнала регистрации» — «Сократить») или с помощью программного метода СократитьЖурналРегистрации(), платформа удаляет строки с помощью стандартной операции DELETE.
  2. В SQLite удаленные страницы данных не возвращаются операционной системе автоматически. Они помечаются как свободные (попадают во внутренний список freelist) и резервируются для повторного использования будущими записями.
  3. Платформа 1С после удаления записей не запускает дефрагментацию и сжатие базы данных SQLite, поэтому размер файла на диске остается прежним.

Почему не срабатывает команда VACUUM при нехватке места

Для физического уменьшения файла и возврата свободного пространства операционной системе используется команда VACUUM утилиты sqlite3.exe. Однако ее выполнение имеет строгие технические ограничения:

Утилита SQLite не выполняет сжатие «на лету» внутри текущего файла. Команда VACUUM создает полную временную копию базы данных, переносит в нее только актуальные (непустые) страницы и после завершения операции подменяет исходный файл новым. Таким образом, если исходный файл 1Cv8.lgd занимает 15 Гб, то на диске, где выполняется операция (или в системном каталоге временных файлов), должно быть свободно не менее 15–16 Гб. Если на диске свободно лишь 11 Гб, команда завершается с ошибкой переполнения диска (database or disk is full), а размер файла не меняется.

Вариант 1. Сжатие журнала через VACUUM при достаточном месте на диске

Если на диске имеется достаточный запас свободного пространства (больше текущего размера файла 1Cv8.lgd), выполним процедуру сжатия по шагам:

  1. Остановим службу сервера «1С:Предприятия», чтобы освободить блокировку файла.
  2. Запустим утилиту sqlite3.exe с передачей команды сжатия в кавычках и точкой с запятой на конце.
  3. Запустим службу сервера 1С обратно.

Посмотрим на пример командного файла (bat/cmd), автоматизирующего данный процесс:


net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
timeout /t 5 /nobreak
"D:\scripts\sqlite3.exe" "D:\1Cv8Log\1Cv8.lgd" "VACUUM;"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Вариант 2. Сжатие журнала при нехватке места на основном диске

Если на диске с логами недостаточно места для создания временного файла, разберем два надежных способа обойти данное ограничение:

Способ А. Перенос на другой накопитель:

  1. Остановим службу сервера 1С: net stop "1C:Enterprise 8.3 Server Agent (x86-64)".
  2. Скопируем файл 1Cv8.lgd на другой локальный или сетевой диск, где свободно более 15 Гб (например, на диск E:\TempLog\).
  3. Выполним сжатие на этом диске:
    "D:\scripts\sqlite3.exe" "E:\TempLog\1Cv8.lgd" "VACUUM;"
  4. После того как файл уменьшится до фактического размера оставшихся записей, переместим его обратно в исходный каталог с заменой.
  5. Запустим службу сервера 1С: net start "1C:Enterprise 8.3 Server Agent (x86-64)".

Способ Б. Использование команды VACUUM INTO:

Современные версии SQLite (начиная с 3.27) поддерживают прямую выгрузку сжатой копии на другой накопитель без предварительного ручного копирования исходного файла:


net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
"D:\scripts\sqlite3.exe" "D:\1Cv8Log\1Cv8.lgd" "VACUUM INTO 'E:\Temp\1Cv8_compacted.lgd';"
move /Y "E:\Temp\1Cv8_compacted.lgd" "D:\1Cv8Log\1Cv8.lgd"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Вариант 3. Полное удаление файла 1Cv8.lgd

Рассмотрим радикальный, но абсолютно безопасный способ быстрого освобождения дискового пространства, если история прошлых событий не представляет ценности:

  1. Остановим службу сервера «1С:Предприятия».
  2. Удалим файл 1Cv8.lgd (или переместим его в архив на внешний накопитель).
  3. Запустим службу сервера 1С.

Важно понимать последствия: удаление файла 1Cv8.lgd никак не влияет на работоспособность информационной базы и целостность учетных данных в СУБД (MS SQL Server, PostgreSQL и др.). При следующем обращении к базе платформа автоматически создаст новый чистый файл 1Cv8.lgd нулевого размера. Единственное последствие — безвозвратная потеря предшествующей истории действий пользователей.

Вариант 4. Переход на старый текстовый формат журнала регистрации

В платформе 1С 8.3 существует возможность вернуться к классическому текстовому формату хранения логов (набор файлов с расширением .lgp, разбитых по дням, неделям или месяцам). Это позволяет удалять устаревшие логи простым удалением файлов за прошлые периоды средствами операционной системы без остановки сервера и процедур сжатия.

Для перевода сервера на раздельное хранение выполним следующие действия:

  1. Откроем файл конфигурации сервера 1С conf.cfg (по умолчанию находится в каталоге C:\Program Files\1cv8\conf\).
  2. Добавим или изменим параметр формата журнала:
    LogFormat=0 (или LogFormat=text).
  3. Перезапустим службу сервера «1С:Предприятия».

Профилактика разрастания журнала регистрации

Чтобы избежать критического заполнения диска в будущем, настроим регулярное обслуживание:

  1. Программная автоочистка: Создадим регламентное задание, выполняющее периодическое сокращение журнала. Посмотрим на пример кода:
    
    ГраницаОчистки = НачалоДня(ТекущаяДата() - (60 * 24 * 60 * 60)); // Храним 60 дней
    СократитьЖурналРегистрации(ГраницаОчистки);
    
  2. Оптимизация состава событий: В свойствах информационной базы отключим избыточное логирование (например, успешную аутентификацию пользователей, частые фоновые задания или некритичные транзакции), оставив фиксацию только ошибок, предупреждений и ключевых бизнес-операций.
← На главную