Почему зависает журнал регистрации 1С при установке отбора по времени и как это исправить?

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

При работе с журналом регистрации 1С многие сталкиваются с ситуацией, когда без фильтрации данные открываются быстро, но стоит задать интервал дат и времени, как система уходит в бесконечное формирование. Из-за этого перестают работать и типовые сервисные отчеты (например, Активность пользователя), зависая на выполнении встроенного метода ВыгрузитьЖурналРегистрации. Разберем детально, почему это происходит и какие шаги необходимо предпринять для восстановления быстродействия.

Причины зависания отбора по времени в текстовом формате журнала (.lgp)

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

  1. Монолитный файл большого объема: Если журнал не разделен по периодам и хранится единым файлом размером в несколько гигабайт (5–8 ГБ и более), сканирование и построение выборки по времени требует колоссального объема операций дискового ввода-вывода и оперативной памяти.
  2. Сбой хронологии записей: При рассинхронизации времени, корректировках системных часов на сервере назад или некорректном переносе файлов нарушается последовательность меток времени. Платформа теряет возможность быстрого позиционирования по файлу и переходит к полному последовательному чтению всего многогигабайтного файла.
  3. Повреждение файла соответствий: Файл .lgf содержит соответствия внутренних идентификаторов метаданных, пользователей и событий. При его повреждении или разрастании сопоставление данных при фильтрации кратно замедляется.
  4. Конкуренция за дескриптор файла: Пока рабочий процесс rphost пытается прочитать большой файл журнала для формирования отбора, другие потоки непрерывно пишут в этот же файл новые события, вызывая блокировки на уровне файловой системы.

Шаг 1. Настройка разделения журнала регистрации по периодам

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

  1. Откроем информационную базу в режиме Конфигуратор с административными правами.
  2. Перейдем в главное меню: Администрирование → Настройка журнала регистрации.
  3. В поле настройки разделения файлов журнала выберем периодичность По дням (для высоконагруженных баз) или По месяцам.
  4. Нажмем ОК для применения настроек.

После включения разделения платформа перестает писать в один гигантский файл и начинает создавать отдельные суточные файлы вида ГГГГММДДHHMMSS.lgp. При установке отбора по времени за конкретный день платформа считывает только соответствующий компактный файл, не затрагивая историю за предыдущие месяцы и годы.

Шаг 2. Сокращение и архивация старых записей

Выясним, действительно ли необходимо хранить в оперативной базе журнал объемом в десятки гигабайт за несколько лет. Оптимальная практика администрирования — оставлять в рабочей базе только актуальные события (например, за последние 1–3 месяца), а устаревшие записи выгружать в архивные файлы.

Посмотрим на пример программного сокращения журнала с помощью встроенного метода СократитьЖурналРегистрации. Данный код можно вынести в отдельную обработку или запускать регламентным фоновым заданием по расписанию:


// Определим границу хранения: удаляем события старше 60 дней
ГраницаХранения = НачалоДня(ТекущаяДата() - 60 * 86400);
ПутьАрхива = "D:\1C_Logs_Archive\Log_Archive_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + ".lgp";

// Выполняем усечение с выгрузкой в архивный файл
СократитьЖурналРегистрации(ГраницаХранения, ПутьАрхива);

Метод СократитьЖурналРегистрации принимает параметры: дату окончания сохраняемого периода, имя файла для архива и флаг формата. После его выполнения размер рабочего каталога 1Cv8Log уменьшается, а скорость выборок нормализуется.

Шаг 3. Оптимизация программного метода ВыгрузитьЖурналРегистрации

Разберем ситуацию, когда отчеты зависают из-за некорректного вызова метода выгрузки в коде конфигурации. Метод имеет сигнатуру:

ВыгрузитьЖурналРегистрации(<ТаблицаВыгрузки>, <Фильтр>, <Колонки>, <События>, <Количество>)

Если в структуре Фильтр заданы только даты, но пятый параметр <Количество> оставлен пустым, платформа пытается поместить в оперативную память абсолютно все строки за указанный промежуток. Если записей сотни тысяч, процесс сервера исчерпывает оперативную память и зависает.

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


// Задаем строгий фильтр
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));
СтруктураФильтра.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));
СтруктураФильтра.Вставить("Пользователь", ТекущийПользователь());

// Создаем приемник данных
ТаблицаЛога = Новый ТаблицаЗначений;

// Выгружаем только необходимые колонки и ограничиваем максимальное число записей
Колонки = "Дата, Пользователь, Событие, ПредставлениеДанных";
МаксКоличество = 1000;

ВыгрузитьЖурналРегистрации(ТаблицаЛога, СтруктураФильтра, Колонки, , МаксКоличество);

Шаг 4. Настройка состава регистрируемых событий

Проанализируем избыточность логирования. Часто журнал регистрации раздувается до критических объемов из-за фиксации всех транзакционных событий. Для снижения нагрузки настроим уровень детализации:

  1. В меню Администрирование → Настройка журнала регистрации проверим состав регистрируемых событий.
  2. Если нет строгой необходимости аудита каждой отдельной транзакции, изменим режим регистрации с Регистрировать все события на Регистрировать ошибки, предупреждения, информацию, исключив служебную фиксацию начала и завершения транзакций.
  3. Программно управлять составом событий можно также методом УстановитьИспользованиеЖурналаРегистрации().

Дополнительные рекомендации по инфраструктуре

  1. Дисковая подсистема: Каталог кластера серверов srvinfo, где находится папка 1Cv8Log, должен располагаться на высокоскоростных SSD/NVMe-накопителях.
  2. Исключения антивируса: Обязательно исключим рабочий каталог журнала регистрации из постоянного мониторинга антивирусного ПО, чтобы предотвратить блокировку дескрипторов файлов при операциях чтения и записи.
← На главную