Как обрезать и оптимизировать журнал регистрации 1С большого объема?

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

Журнал регистрации 1С (ЖР) — один из важнейших инструментов для аудита действий пользователей и расследования технических сбоев. Однако при высокой интенсивности работы базы данных его объем может лавинообразно увеличиваться. Ситуации, когда файл лога разрастается до 100, 200 или даже 400 ГБ — далеко не редкость в крупных организациях. Работа с таким гигантским файлом стандартными средствами превращается в кошмар: Конфигуратор зависает, выгрузка данных идет часами, а дисковая подсистема испытывает колоссальные нагрузки.

В этой статье мы подробно разберем, как правильно подойти к задаче обрезки журнала регистрации, выясним требования к монопольному режиму, проанализируем разницу в форматах логов и составим безопасный пошаговый план оптимизации дискового пространства без долгого простоя рабочих процессов.

Требуется ли монопольный режим для обрезки журнала?

Начнем с главного вопроса, который волнует каждого администратора: можно ли выполнить сокращение ЖР «на лету», когда в базе работают пользователи?

Ответ однозначный: штатное сокращение журнала регистрации требует монопольного доступа к базе данных.

Если мы попытаемся выполнить процедуру через Конфигуратор (меню «Администрирование» — «Настройка журнала регистрации» — кнопка «Сократить») или запустим пакетный режим утилиты командной строки с параметром /ReduceEventLogSize, система потребует эксклюзивную блокировку. В файловом варианте не должно быть ни одного активного сеанса. В клиент-серверном варианте активные транзакции пользователей также заблокируют выполнение этой операции. Пытаться «резать» 400-гигабайтный рабочий файл в монопольном режиме в рабочее время — критическая ошибка, которая приведет к многочасовому простою компании.

Разбираемся в форматах журнала регистрации: .lgd против .lgf/.lgp

Прежде чем приступать к активным действиям, нам необходимо выяснить, в каком формате ведется запись событий в нашей системе. От этого зависят дальнейшие шаги. Платформа 1С:Предприятие 8.3 поддерживает два формата хранения:

  1. Новый формат (SQLite, файл 1Cv8.lgd). Этот формат появился в платформе версии 8.3.5. Все данные пишутся в одну монолитную базу данных SQLite.

    Особенность: Настройка разделения журнала по периодам (дням, неделям, месяцам) здесь недоступна. База всегда хранится в одном файле. Самый главный подводный камень формата SQLite заключается в том, что после удаления записей (даже успешного сокращения через Конфигуратор) размер файла на диске физически не уменьшается. Чтобы вернуть свободное место операционной системе, необходимо выполнять процедуру сжатия базы данных — VACUUM.

  2. Старый последовательный формат (файлы 1Cv8.lgf и файлы данных .lgp). Начиная с версии платформы 8.3.12, компания 1С вернула этот текстовый формат в качестве рекомендуемого по умолчанию из-за частых проблем с производительностью и блокировками SQLite на высоконагруженных системах.

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

Оптимальный план действий для администратора (Best Practice)

Если перед нами стоит задача очистить журнал объемом в несколько сотен гигабайт, попытка использовать стандартную кнопку «Сократить» в Конфигураторе почти гарантированно приведет к зависанию процесса, переполнению диска временными файлами и сбою. Мы пойдем другим, гораздо более безопасным и быстрым путем, который потребует остановки базы всего на несколько минут.

Наш план состоит из двух ключевых этапов: быстрый запуск нового чистого журнала на рабочей базе и последующая обработка старого гигантского архива в офлайн-режиме.

Этап 1. Быстрый запуск чистого журнала и смена формата на рабочий

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

  1. Выберем технологическое окно (например, поздний вечер или выходной день) и попросим всех пользователей выйти из базы. В консоли администрирования серверов 1С временно заблокируем начало новых сеансов и регламентных заданий.
  2. Остановим службу «Агент сервера 1С:Предприятия» (или закроем все соединения, если база файловая).
  3. Перейдем в каталог размещения журнала регистрации. Для серверной базы он обычно находится по пути:

    C:\Program Files\1cv8\srvinfo\<Имя_кластера>\<Идентификатор_базы>\1Cv8Log

  4. Полностью переместим (вырежем) папку 1Cv8Log на другой физический диск — например, на медленный архивный накопитель, где много свободного места. На основном быстром SSD-диске не должно остаться этого файла.
  5. Создадим на прежнем месте новую пустую папку с именем 1Cv8Log.
  6. Важный лайфхак: Если мы хотим сразу перевести систему на более стабильный и удобный старый формат, создадим внутри этой пустой папки обычный пустой текстовый файл и назовем его 1Cv8.lgf (обратите внимание на расширение). Когда платформа обнаружит этот файл-маркер, она автоматически начнет писать лог в старом формате.
  7. Запустим службу сервера 1С и снимем блокировку сеансов. Пользователи могут сразу входить в базу и работать. Этот простой маневр занимает не более 5-10 минут.
  8. Теперь зайдем в Конфигуратор рабочей базы, откроем настройки журнала регистрации и установим разделение по периодам (например, «Разделять по месяцам»). С этого момента система будет каждый месяц создавать новый небольшой файл .lgp. В конце года мы сможем просто скопировать файлы за прошедшие месяцы в архив, а из рабочей папки удалить их вручную без остановки системы!

Этап 2. Обработка и сжатие старого 400 ГБ архива в офлайне

У нас остался перемещенный файл старого лога (допустим, это был файл нового формата 1Cv8.lgd). Нам нужно оставить из него только данные за 2018–2019 годы, а остальное удалить для экономии места. Теперь мы можем делать это абсолютно спокойно на любом свободном компьютере или тестовом сервере, не мешая пользователям.

Поскольку .lgd — это стандартная база данных SQLite, мы воспользуемся бесплатной и удобной утилитой DB Browser for SQLite или консольным клиентом sqlite3.exe.

Разберем по шагам процесс очистки через SQL-запросы:

  1. Запустим утилиту работы с SQLite и откроем наш файл 1Cv8.lgd.
  2. Выясним, какие записи занимают больше всего места. Как правило, до 80-90% объема журнала регистрации забито техническим мусором — записями о начале и завершении транзакций фоновых заданий (события _$Transaction$_.Begin, _$Transaction$_.Commit, а также задачи фонового обмена).
  3. Мы можем выполнить SQL-запрос на удаление этих событий за ненужные нам периоды. Например, выполним команду удаления всех записей, которые старше 2020 года (оставляя нужные нам 2018 и 2019 года):

    DELETE FROM EventLog WHERE Date < '2018-01-01 00:00:00' OR Date >= '2020-01-01 00:00:00';

    Или запрос на точечное удаление транзакционного мусора, который не несет смысловой нагрузки для аудита:

    DELETE FROM EventLog WHERE EventID IN ( SELECT EventID FROM EventIDTable WHERE Name LIKE '_$Transaction$%' );

  4. После выполнения запросов на удаление строк закроем транзакцию и сохраним изменения (Commit). Данные удалились из таблиц, но сам файл 1Cv8.lgd все еще весит 400 ГБ. Нам необходимо выполнить команду сжатия.
  5. Критически важно: Для выполнения команды сжатия VACUUM утилите потребуется создать временную копию файла. Это значит, что на диске, где выполняется процедура, должно быть свободно как минимум еще столько же места, сколько весит сам файл (в нашем случае — еще около 400 ГБ свободного пространства!). Убедитесь в наличии свободного места перед запуском команды.
  6. Запустим команду сжатия в консоли SQLite:

    VACUUM;

    Этот процесс на большом объеме данных может занять несколько часов даже на быстром твердотельном накопителе (SSD). По завершении операции файл уменьшится в несколько раз.
  7. Полученный очищенный файл базы данных SQLite теперь можно заархивировать обычным ZIP или RAR архиватором (базы данных отлично сжимаются, уменьшаясь в объеме еще в 3–5 раз) и отправить на долгосрочное хранение. При необходимости расследования старых инцидентов этот файл всегда можно будет открыть в Конфигураторе через стандартное меню «Файл» — «Открыть».

Используя предложенную методику, мы не только решили сиюминутную проблему с дисковым пространством и зависанием Конфигуратора, но и перевели систему на современный, легко обслуживаемый формат хранения логов, предотвратив подобные проблемы в будущем.

← На главную