Как вынести журнал регистрации 1С на отдельный диск

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

Начиная с версий платформы 1С:Предприятие 8.3.5, журнал регистрации по умолчанию создается в новом формате на базе компактной СУБД SQLite (файл с расширением .lgd). При активной работе пользователей и частом выполнении фоновых заданий интенсивность записи в журнал регистрации может достигать значительных величин (от нескольких единиц до десятков мегабайт в секунду), создавая постоянную конкурентную нагрузку на дисковую подсистему, где расположены базы данных или системные каталоги.

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

Причины повышенной нагрузки на диск при использовании журнала SQLite

Прежде чем приступать к переносу файлов, выясним, почему журнал регистрации генерирует непрерывный поток операций ввода-вывода (I/O):

  1. Режим журналирования WAL (Write-Ahead Logging). SQLite использует файлы 1Cv8.lgd-wal и 1Cv8.lgd-shm. При фиксации транзакций и записи каждого события происходят системные вызовы принудительного сброса буферов на диск (fsync / FlushFileBuffers), что создает высокую нагрузку даже при небольшом объеме сохраняемого текста.
  2. Блокировка базы на запись. SQLite блокирует файл базы данных целиком при модификации данных. При одновременной записи из десятков сеансов выстраивается очередь, увеличивающая время отклика диска.
  3. Избыточная детализация логирования. Типовые конфигурации на базе БСП непрерывно фиксируют старты регламентных заданий, транзакции и служебные события.

Способ 1. Вынос папки журнала регистрации через связь каталогов (Windows Junction)

Наиболее точечный вариант, позволяющий изолировать исключительно журнал регистрации без перемещения остальных данных кластера, — использование соединений каталогов (Junction Points) файловой системы NTFS с помощью утилиты mklink.

Разберем процесс по шагам:

  1. Остановим службу сервера 1С:Предприятие (1C:Enterprise 8.3 Server Agent) через консоль services.msc или командную строку: net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
  2. Найдем рабочий каталог с журналом регистрации конкретной информационной базы. По умолчанию он находится по пути: C:\Program Files\1cv8\srvinfo\<ИмяСервера>\<ИдентификаторБазы>\1Cv8Log.
  3. Переместим существующую папку 1Cv8Log на целевой быстрый диск, например в каталог D:\1C_Logs\<ИдентификаторБазы>\1Cv8Log. Убедимся, что на новом месте у пользователя, от имени которого работает служба 1С (обычно USR1CV8), есть полные права доступа к папке и файлам.
  4. В исходном каталоге базы данных создадим соединение каталогов (Junction Point) с помощью команды mklink /j:
    
    mklink /j "C:\Program Files\1cv8\srvinfo\server_name\base_guid\1Cv8Log" "D:\1C_Logs\base_guid\1Cv8Log"
    
  5. Запустим службу сервера 1С: net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Платформа 1С продолжит обращаться по стандартному пути, однако физическая запись файлов 1Cv8.lgd, 1Cv8.lgd-wal и 1Cv8.lgd-shm будет производиться на выделенный накопитель.

Способ 2. Вынос каталога журнала в Linux с помощью bind-монтирования

В операционных системах Linux символические ссылки могут вызывать сложности с правами доступа службы ragent. Надежным аналогом является монтирование каталога с отдельного накопителя через mount --bind.

Выполним следующие действия:

  1. Остановим службу srv1cv83: systemctl stop srv1cv8-8.3.*@default.service
  2. Перенесем каталог журнала регистрации /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/<ИдентификаторБазы>/1Cv8Log на выделенный смонтированный диск, например в /mnt/fast_disk/1c_logs/<ИдентификаторБазы>/1Cv8Log.
  3. Назначим корректные права на новую папку:
    
    chown -R usr1cv8:grp1cv8 /mnt/fast_disk/1c_logs/
    chmod -R 750 /mnt/fast_disk/1c_logs/
    
  4. Смонтируем директорию и зафиксируем монтирование в /etc/fstab:
    
    mount --bind /mnt/fast_disk/1c_logs/base_guid/1Cv8Log /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/base_guid/1Cv8Log
    
    Добавим строку в /etc/fstab для автоматического монтирования при загрузке ОС:
    
    /mnt/fast_disk/1c_logs/base_guid/1Cv8Log /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/base_guid/1Cv8Log none bind 0 0
    
  5. Запустим службу сервера 1С: systemctl start srv1cv8-8.3.*@default.service

Способ 3. Перенос всего каталога данных кластера (srvinfo) на быстрый диск

Если требуется ускорить не только журнал регистрации, но и работу полнотекстового поиска, сеансовые данные и временные файлы кластера, рекомендуется полностью перенести каталог srvinfo с помощью ключа запуска -d.

Рассмотрим последовательность настройки для Windows:

  1. Остановим службу сервера 1С:Предприятие.
  2. Скопируем всю папку srvinfo на новый быстрый диск с обязательным сохранением прав доступа NTFS (через xcopy /O /X /E /H /K или robocopy /COPYALL).
  3. Откроем редактор реестра regedit и перейдем к ветке параметров службы: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent....
  4. В строковом параметре ImagePath изменим путь после ключа -d, указав новый каталог (например, -d "D:\1C_Data\srvinfo").
  5. Запустим службу сервера 1С. При последующих обновлениях платформы потребуется скорректировать параметр -d для новой службы.

Дополнительные меры по снижению дисковой нагрузки

Помимо переноса файлов на отдельный накопитель, проанализируем параметры самого журнала регистрации:

  1. Снижение уровня логирования. В консоли администрирования кластера или в конфигураторе в свойствах информационной базы изменим режим регистрации: установим уровень «Регистрировать ошибки и предупреждения» или исключим регистрацию транзакций.
  2. Регламентная обрезка журнала. Рекомендуется выполнять регулярное сокращение журнала с помощью команды Конфигуратора: 1cv8.exe DESIGNER /IBConnectionString "..." /ReduceEventLogSize 2024-01-01 или используя встроенную процедуру платформы УдалитьСобытияЖурналаРегистрации().
  3. Переключение на старый текстовый формат (.lgf). Если высокая нагрузка SQLite блокирует работу высоконагруженной базы, можно конвертировать журнал обратно в текстовый формат, где запись ведется простым добавлением строк в конец файла без сложных блокировок: 1cv8.exe DESIGNER /IBConnectionString "..." /ReduceEventLogSize -Format LGF
← На главную