Журнал регистрации раздулся: как уменьшить его на сервере 1С с MS SQL или PostgreSQL
Содержание
Журнал регистрации 1С 8.3 очищают в конфигураторе: Администрирование → Настройка журнала регистрации → Сократить, указав дату, до которой события удаляются. Для регулярной очистки ту же операцию запускают пакетным режимом с параметром /ReduceEventLogSize по расписанию Windows. Запрос к таблицам MS SQL или PostgreSQL здесь не поможет: в клиент-серверном варианте журнал хранится не в базе данных SQL, а в файлах на сервере 1С.
Эту путаницу стоит снять сразу. Если на SQL-сервере вырос файл .ldf, то это журнал транзакций СУБД, а не журнал регистрации 1С. Его чистят другими командами, они разобраны ниже отдельным разделом.
Где лежит журнал регистрации и почему он разрастается
Журнал пишет сервер 1С, а не СУБД. Для каждой информационной базы кластер ведёт отдельный каталог:
- 📁 серверная база:
<каталог srvinfo>\reg_1541\<GUID базы>\1Cv8Log; - 📁 файловая база: подкаталог
1Cv8Logв каталоге самой базы.
По умолчанию srvinfo находится в C:\Program Files\1cv8\srvinfo, но при установке его часто переносят на отдельный диск. GUID базы проще всего найти в файле 1CV8Clst.lst в каталоге reg_1541: там рядом с именем базы указан её идентификатор. Второй способ — отсортировать подкаталоги reg_1541 по размеру: раздутый журнал обычно видно сразу.
Два формата хранения
| Формат | Файлы | Как выглядит |
|---|---|---|
| Последовательный (старый) | 1Cv8.lgf + файлы *.lgp | словарь в .lgf, события в .lgp, по файлу на период |
| SQLite (новый) | 1Cv8.lgd | один файл-база SQLite |
Формат SQLite появился в 8.3 как альтернатива старому. Позже по умолчанию снова стал использоваться последовательный формат, поэтому в одном кластере вполне могут жить базы с разными журналами. Посмотрите, какие файлы лежат в 1Cv8Log, — от этого зависит, какие способы вам подходят.
Почему журнал растёт
- 📈 уровень регистрации «Информация» или «Примечания» — платформа пишет каждое изменение, вход, выход и фоновое задание;
- 🔄 частые регламентные задания: обмены, загрузка курсов, работа с почтой, проверка ЭДО;
- 👥 много пользователей и интеграций через HTTP-сервисы, каждая сессия оставляет следы;
- 🗓 журнал не делится по периодам, и старые события никто не удаляет.
Журнал в десятки гигабайт тормозит не только свой просмотр. Сервер тратит время на запись, растёт время резервного копирования каталога srvinfo, а при нехватке места на диске начинаются ошибки у пользователей.
Когда чистить пора
Ориентиры такие: файл 1Cv8.lgd больше 5–10 ГБ, суммарный размер .lgp за пределами того, что вы готовы хранить, журнал открывается минуту и дольше, на системном диске заканчивается место. Если же журнал нужен для расследований (кто изменил документ, кто удалил объект), заранее решите, сколько истории держать: обычно хватает 3–12 месяцев.
Способ 1. Сократить журнал регистрации в конфигураторе
Это штатный и самый безопасный путь. Он работает одинаково для файловой и серверной базы, монопольный режим не нужен.
- Откройте базу в режиме
Конфигураторпод пользователем с правами администратора. - Выберите в меню
Администрирование → Настройка журнала регистрации. - Нажмите
Сократить. - Укажите дату: события раньше неё будут удалены.
- Если старую историю нужно сохранить, включите выгрузку удаляемых событий в файл и укажите путь на другом диске.
- Подтвердите операцию и дождитесь окончания.
На журнале в десятки гигабайт сокращение идёт долго — от десятков минут до нескольких часов. Пользователи в это время могут работать, но запись в журнал заметно замедляется. Запускайте операцию вечером или в выходные.
После сокращения файл 1Cv8.lgd может не уменьшиться на диске: SQLite освобождает страницы внутри файла, но не отдаёт место системе. Как сжать файл, описано в способе 3.
В последовательном формате диск освобождается сразу: удаляются целые файлы .lgp за старые периоды.
Способ 2. Автоматическая очистка журнала по расписанию
Регламентное задание внутри 1С журнал не сократит: встроенный язык умеет читать и выгружать события, но команды сокращения в нём нет. Поэтому автоматику строят снаружи, через пакетный режим конфигуратора и Планировщик заданий Windows.
Командный файл
Пример ниже оставляет последние 90 дней и пишет протокол в отдельный файл. Путь к 1cv8.exe, имя сервера, базы и учётные данные подставьте свои.
@echo off
rem Дата отсечения: сегодня минус 90 дней в формате ГГГГ-ММ-ДД
for /f %%d in ('powershell -NoProfile -Command "(Get-Date).AddDays(-90).ToString('yyyy-MM-dd')"') do set CUTDATE=%%d
"C:\Program Files\1cv8\8.3.24.1342\bin\1cv8.exe" DESIGNER ^
/S"srv1c\buh" ^
/N"РегламентЖР" /P"пароль" ^
/ReduceEventLogSize %CUTDATE% ^
/Out "D:\logs\reduce_eventlog.log" -NoTruncate ^
/DisableStartupDialogs
Что здесь важно:
- 🔑 заведите в базе отдельного пользователя с правами администратора только для этой задачи и не используйте учётку живого человека;
- 📅 дату параметр
/ReduceEventLogSizeпринимает в форматеГГГГ-ММ-ДД; - 💾 чтобы сохранить удалённые события, добавьте к параметру ключ
-saveAsс путём к файлу; - 📝 файл из
/Outпроверяйте после первых запусков: там видно, отработала ли команда и не помешала ли ей блокировка.
Задание в Планировщике
- Откройте
taskschd.mscна сервере 1С. - Создайте задачу с запуском раз в неделю или раз в месяц, ночью.
- Укажите пользователя Windows, у которого есть доступ к каталогу с
1cv8.exeи к каталогу логов. - Включите «Выполнять вне зависимости от регистрации пользователя».
- В действии укажите путь к
.bat.
Номер платформы в пути лучше вынести в переменную или использовать 1cestart.exe. Иначе после обновления платформы и удаления старой версии задача молча перестанет работать.
Если баз много, перечислите их в отдельном списке и вызывайте конфигуратор в цикле. Запускайте базы последовательно, а не параллельно: сокращение нагружает диск.
Способ 3. SQLite-запросы к файлу 1Cv8.lgd
Это и есть «очистка журнала регистрации через SQL» в буквальном смысле. Файл 1Cv8.lgd — обычная база SQLite, её можно открыть утилитой sqlite3 или любым просмотрщиком SQLite. Способ для администраторов, которые понимают, что делают.
Работайте только при остановленной службе сервера 1С и только с копией файла. Остановка службы обрывает сеансы всех пользователей всех баз кластера, поэтому делайте это в согласованное окно.
Сжать файл после сокращения
Самый полезный и безопасный сценарий: вы уже сократили журнал конфигуратором, а файл остался прежнего размера.
- Предупредите пользователей и остановите службу
Агент сервера 1С:Предприятия 8.3. - Скопируйте
1Cv8.lgdв резервный каталог. - Выполните сжатие:
sqlite3.exe "D:\srvinfo\reg_1541\<GUID>\1Cv8Log\1Cv8.lgd" "VACUUM;"
- Проверьте целостность:
sqlite3.exe "D:\srvinfo\reg_1541\<GUID>\1Cv8Log\1Cv8.lgd" "PRAGMA integrity_check;"
- Ответ
ok— запускайте службу. Любой другой ответ — верните копию из шага 2.
VACUUM пересобирает файл, поэтому на диске нужно свободное место примерно равное размеру журнала.
Удаление записей запросом
Удалять события командой DELETE напрямую технически можно, но структура таблиц .lgd не документирована для такого использования. Перед любым запросом посмотрите схему (.tables, .schema) на копии файла и убедитесь, как хранится дата события. Ошибка в условии оставит журнал без истории или с битыми ссылками на справочники пользователей и метаданных. Штатное сокращение из способа 1 делает то же самое без этих рисков.
Если журнал не нужен совсем
Когда историю хранить не требуется, проще начать журнал заново:
- Остановите службу сервера 1С.
- Переименуйте каталог
1Cv8Logнужной базы, например в1Cv8Log_old. - Создайте пустой каталог
1Cv8Log. - Запустите службу: платформа создаст новый журнал.
- Через несколько дней, убедившись, что всё работает, удалите или заархивируйте старый каталог.
Способ 4. Внешние обработки для работы с журналом
Обработки из интернета и встроенные формы БСП (Администрирование → Обслуживание → Журнал регистрации в БП 3.0 и ЗУП 3.1) удобны для анализа: фильтры, выгрузка, поиск нужного события. Но удалять записи они не умеют, ограничение задаёт платформа.
Обработку стоит использовать перед очисткой. Сценарий такой:
- Отберите нужные события: например, удаление объектов, изменение прав, вход под администратором.
- Выгрузите их в файл или в таблицу для архива.
- Сократите журнал одним из способов выше.
Обработку из чужого источника открывайте в тестовой копии базы. Внешняя обработка выполняется с правами пользователя и может изменить данные.
Не путайте с журналом транзакций SQL (.ldf)
Если запрос «очистить журнал на SQL» появился из-за растущего файла .ldf в MS SQL Server, проблема в модели восстановления базы. При модели FULL журнал транзакций растёт до тех пор, пока не будет сделана резервная копия журнала.
Два корректных пути:
| Ситуация | Что делать |
|---|---|
| Резервные копии журнала транзакций не нужны | перевести базу в модель SIMPLE и сжать .ldf |
| Нужно восстановление на момент времени | оставить FULL и настроить регулярный бэкап журнала транзакций |
Команды для первого случая выполняются в SQL Server Management Studio:
ALTER DATABASE [buh] SET RECOVERY SIMPLE;
GO
USE [buh];
GO
-- логическое имя файла журнала смотрите в свойствах базы
DBCC SHRINKFILE (N'buh_log', 1024);
GO
Число 1024 — целевой размер в мегабайтах. Логическое имя файла журнала смотрите в свойствах базы, раздел «Файлы», или запросом SELECT name FROM sys.database_files;.
После перехода на SIMPLE восстановиться на произвольный момент времени уже нельзя: только на момент полной копии. Согласуйте это с тем, кто отвечает за резервное копирование.
В PostgreSQL отдельного файла журнала у базы нет. Похожую роль играют WAL-файлы, но их объём регулируется настройками сервера СУБД, а не командами внутри базы.
Ошибки при очистке журнала регистрации
Частые промахи
- ❌ удалить каталог
1Cv8Logпри работающей службе: файлы заблокированы, а частично удалённый журнал платформа может не открыть; - ❌ удалить
1Cv8.lgfв последовательном формате: это словарь, без него файлы.lgpне читаются; - ❌ отключить журнал полностью, чтобы «не рос»: потом не найти, кто провёл или удалил документ;
- ❌ чистить журнал перед проверкой или разбором инцидента, не выгрузив нужные события.
Как настроить журнал, чтобы он не разрастался снова
Все настройки находятся в том же окне Администрирование → Настройка журнала регистрации конфигуратора.
Уровень регистрации
| Уровень | Что пишется | Кому подходит |
|---|---|---|
| Ошибки | только ошибки | высоконагруженные базы, где история изменений не нужна |
| Предупреждения | ошибки и предупреждения | компромисс для крупных баз |
| Информация | плюс входы, выходы, изменения данных | большинство бухгалтерских баз |
| Примечания | всё, включая служебные события | на время диагностики |
Снижать уровень ниже «Информации» в учётных базах стоит осторожно. Именно на этом уровне видно, кто и когда изменил документ, а без этого разбор спорных ситуаций превращается в гадание.
Разделение по периодам
Для последовательного формата включите разделение журнала по месяцам. Тогда каждый месяц пишется в свой файл .lgp, и старые периоды легко архивировать или удалять целыми файлами, не трогая текущие.
Чек-лист обслуживания
Регламентные задания
Посмотрите, какие регламентные задания запускаются слишком часто. Загрузка курсов раз в минуту или опрос почты каждые 30 секунд дают тысячи записей в сутки при нулевой пользе. Список заданий в БП 3.0 и ЗУП 3.1: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания.