Многие системные администраторы и разработчики сталкиваются с ситуацией, когда стандартная процедура сокращения журнала регистрации в 1С:Предприятие 8.3 приводит к «зависанию» Конфигуратора. Особенно это актуально для баз данных, где журнал регистрации ведется в «новом» формате SQLite (файл с расширением .lgd). В этой статье мы подробно разберем, почему так происходит, как дождаться завершения процесса и что нужно сделать, чтобы файл лога действительно уменьшился в размере.
Когда мы нажимаем кнопку «Сократить» в интерактивном режиме, платформа 1С начинает последовательно перебирать записи в базе данных SQLite и удалять те из них, которые предшествуют указанной дате. Если журнал имеет внушительный размер (например, более 5–10 Гб), количество транзакций на удаление исчисляется миллионами.
Проанализируем техническую сторону процесса: SQLite — это файл-серверная база данных. При массовом удалении записей она создает временные файлы (journal-файлы), чтобы обеспечить целостность данных в случае сбоя. Эти операции ввода-вывода создают огромную нагрузку на дисковую подсистему. Конфигуратор при этом перестает отвечать на запросы операционной системы, так как основной поток программы занят ожиданием завершения дисковых операций. Это нормальное поведение для больших объемов данных. Процесс может занимать от нескольких часов до суток в зависимости от скорости дисков и объема лога.
Чтобы не блокировать интерфейс Конфигуратора и иметь возможность отслеживать процесс косвенно, рассмотрим запуск сокращения через пакетный режим. Это более надежный метод для больших журналов.
Выполним следующую команду в командной строке (CMD) от имени администратора:
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /S "ServerName\BaseName" /N "Admin" /P "Password" /Out D:\logs\reduce_log.txt /ReduceEventLogSize 2023-12-31 -saveAs C:\Archive\OldLog.lgd
Разберем параметры этой команды подробнее:
/S "ServerName\BaseName" — адрес вашей информационной базы на сервере./N /P — учетные данные администратора 1С./Out — путь к текстовому файлу, в который система запишет результат выполнения. Это поможет понять, завершилась ли операция успехом./ReduceEventLogSize — ключевой параметр, за которым следует дата, по которую нужно обрезать логи.-saveAs — необязательный параметр, позволяющий сохранить удаляемые данные в отдельный файл. Если архив старых логов не нужен, этот параметр можно опустить, что немного ускорит процесс.После завершения штатной процедуры сокращения многие замечают странную вещь: 1С отрапортовала об успехе, записи в журнале исчезли, но файл 1Cv8.lgd на диске не уменьшился ни на байт. Выясним причину этого явления.
SQLite при удалении данных не отдает место операционной системе сразу. Она просто помечает страницы внутри файла как «пустые» и готовые для записи новых событий. Это сделано для экономии ресурсов в будущем. Чтобы физически уменьшить размер файла и вернуть место на диск, необходимо выполнить дефрагментацию базы данных SQLite.
Для этого нам понадобится официальная утилита sqlite3.exe. Рассмотрим алгоритм действий:
Агент сервера 1С:Предприятия. Это критически важно, так как файл журнала должен быть свободен от блокировок.C:\Program Files\1cv8\srvinfo\...\1Cv8Log).
sqlite3 1Cv8.lgd "VACUUM;"
Проанализируем ситуацию с дисковым пространством перед запуском: команда VACUUM создает полную копию файла, перестраивая его структуру. Это означает, что на диске должно быть свободного места не меньше, чем текущий размер вашего журнала регистрации. Если места недостаточно, операция завершится ошибкой.
Если время ограничено и вы не можете ждать 6–10 часов, пока платформа обработает 8-гигабайтный файл, рассмотрим альтернативный вариант, который часто применяют системные администраторы.
1Cv8Log нужной базы.1Cv8.lgd и просто переименуем его, например, в 1Cv8_2023_archive.lgd.При первом же событии, требующем записи в журнал, 1С увидит, что файла 1Cv8.lgd нет, и автоматически создаст новый пустой файл. Это происходит мгновенно. Если вам потребуется просмотреть старые записи, вы всегда сможете открыть переименованный файл через Меню — Файл — Открыть в самом Конфигураторе.
Чтобы избежать многочасовых ожиданий в будущем, проанализируем следующие рекомендации:
1Cv8.lgd для комфортной работы — до 10 Гб. При превышении этого порога не только сокращение, но и обычный просмотр журнала через интерфейс программы начнет заметно тормозить.-wal и -shm в папке лога. Это режим Write-Ahead Logging, который ускоряет запись. Не удаляйте их вручную при работающем сервере, так как это может повредить основную базу лога.Таким образом, мы выяснили, что «зависание» при сокращении — это лишь следствие большого объема работы, выполняемого SQLite. Сочетание штатного сокращения и последующей команды VACUUM (или использование метода ручной ротации) позволяет эффективно управлять объемом занимаемого места на сервере.