При администрировании информационных баз в «1С:Предприятие 8.3» системные администраторы и разработчики часто сталкиваются с тем, что в окне настройки журнала регистрации в Конфигураторе пропадает привычная опция «Разделять хранение журнала по периодам» (по дням, неделям, месяцам или годам). Разберем причины такого поведения платформы, внутреннее устройство журнала и способы управления размером файлов логов.
Проанализируем ситуацию: начиная с версии платформы 8.3.5, фирма «1С» представила новый формат хранения журнала регистрации на базе встраиваемой СУБД SQLite. В этом формате все события информационной базы пишутся в единый файл с расширением 1Cv8.lgd (вместо прежней структуры из файла описания 1Cv8.lgf и набора периодических фрагментов .lgp).
Поскольку архитектура SQLite предполагает хранение таблиц и индексов внутри одного файла базы данных, концепция физического разбиения лога на отдельные файлы по временным интервалам теряет смысл. По этой причине платформа «1С» автоматически скрывает поле «Разделять хранение журнала по периодам» из интерфейса Конфигуратора, если текущая база использует формат .lgd.
Рассмотрим специфику нового формата, которую необходимо учитывать при сопровождении баз:
Администрирование -> Настройка журнала регистрации -> Сократить или через запуск с ключом /ReduceEventLogSize записи удаляются из таблиц SQLite, но сам файл 1Cv8.lgd на диске не уменьшается. СУБД SQLite сохраняет выделенное дисковое пространство для будущих записей..lgd может создавать повышенную нагрузку на дисковую подсистему и приводить к взаимоблокировкам при интенсивной параллельной записи событий.Если вам требуется восстановить возможность разделения журнала по периодам или устранить проблемы с блокировками SQLite, выполним переход на классический текстовый формат. Разберем этот процесс по шагам:
1Cv8Log. В клиент-серверном варианте он располагается в каталоге данных службы кластера: srvinfo/reg_xxxx/<Идентификатор_Базы>/1Cv8Log. В файловом варианте — внутри папки с информационной базой.1Cv8.lgd, а также сопутствующие временные файлы 1Cv8.lgd-wal и 1Cv8.lgd-shm (если они присутствуют).1Cv8Log пустой текстовый файл с именем 1Cv8.lgf.Если вы продолжаете использовать формат .lgd и после сокращения журнала хотите физически освободить место на жестком диске, выполним операцию дефрагментации базы данных SQLite:
1Cv8.lgd.sqlite3.exe и поместим её рядом с файлом журнала или укажем к ней путь в командной строке.
sqlite3 1Cv8.lgd "VACUUM;"
После выполнения команды утилита перестроит внутреннюю структуру файла базы данных, удалит неиспользуемые страницы и уменьшит размер файла 1Cv8.lgd до фактически занятого объема.
Для регулярного обслуживания журнала регистрации без интерактивного входа в Конфигуратор можно использовать встроенный язык 1С. Рассмотрим методы ОчиститьЖурналРегистрации() и СкопироватьЖурналРегистрации(), позволяющие удалять устаревшие события и сохранять архивные копии по регламентному расписанию:
// Пример программного сокращения журнала с сохранением копии
ГраницаОчистки = НачалоДня(ТекущаяДата() - 30 * 86400); // Оставляем последние 30 дней
ИмяФайлаАрхива = "C:\LogBackup\EventLog_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + ".xml";
// Создаем фильтр для выгрузки архивных записей
Фильтр = Новый Структура;
Фильтр.Вставить("ДатаОкончания", ГраницаОчистки);
// Выгружаем старые события в файл архива
СкопироватьЖурналРегистрации(ИмяФайлаАрхива, Фильтр);
// Очищаем журнал до заданной даты
ОчиститьЖурналРегистрации(ГраницаОчистки);
Таким образом, отсутствие настройки разделения по периодам является штатным поведением платформы для формата SQLite. В зависимости от архитектурных задач вы можете либо сжимать файл утилитой VACUUM, либо перевести журнал в текстовый формат .lgf с включением периодического разделения.