Журнал регистрации 1С:Предприятие
Тема журнала регистрации не нова, но спотыкаются на ней с завидной регулярностью. Поэтому сегодня мы решили подробно обсудить эту проблему.
Итак, что такое журнал регистрации? Это внутренний лог конфигурации, который содержит события обращения к объектам информационной базы. Его не следует путать с технологическим журналом, который представляет лог работы платформы.
Что можно узнать из журнала регистрации? Да практически все, если конечно у вас задан нужный уровень логирования. Кто создал, изменил, провел, распровел или удалил документ, элемент справочника и т.д. и т.п.
Также в нем фиксируются все ошибки и предупреждения, но опять-таки только те, которые мы получаем на уровне 1С:Предприятия, т.е. внутри программы.
Изначально для журнала регистрации использовался последовательный формат. Несмотря на то, что файлы таких журналов используют собственные расширения по факту там плоский текст в собственном формате.
Запись событий происходит в самый конец файла и является крайне простым и дешевым действием. Собственно говоря, так работают практически все системы первичных логов – пишут плоский текст в конец файла.
Но в 1С не все так просто, инструмент для чтения лога встроен в конфигурации и воспользоваться им может любой пользователь, установив отборы на свое усмотрение или вовсе их не устанавливая.
И вот тут всплывает обратная сторона плоского текстового лога – будучи крайне дешевым по записи он весьма и весьма дорог на чтение. Фактически нам придется прочитать и распарсить весь объем текста.
В силу особенностей работы 1С такой запрос в рабочее время мог просто положить базу.
После чего какой-то «светлой» голове пришла идея использовать для хранения логов SQLite. Проблема чтения сразу решилась, ну это, собственно сильная сторона любой СУБД. Зато сразу прибавилось других проблем.
Запись в СУБД – дело дорогое, особенно непосредственная запись, которую использовала 1С. А SQLite сама по себе на запись не быстрая, вот и вышло, что хотели как лучше, а получилось, как всегда.
Плюс размер данных в СУБД всегда будет выше, чем размер плоского текста. Поэтому еще и получили раздувание файла журнала местами до совсем гигантских размеров, особенно по сравнению с размером базы.
В результате вопрос чтения из журнала решили, но ценой значительного ухудшения скорости записи, что привело к серьезным проблемам производительности во многих практических случаях.
В итоге от формата SQLite отказались и снова вернули последовательный формат, в последних версиях платформы к нему добавили индексы, но особых улучшений на чтение пока замечено не было.
Итак, что вам нужно сделать со своим журналом регистрации? Прежде всего определиться с форматом, точнее перевести все базы, которые могли использовать до сих пор формат SQLite в последовательный формат.
Затем настроить нужную подробность ведения журнала. От этого непосредственно зависит его объем.
И, наконец, настройте его разбиение по периодам. Лучше всего по дням. А затем, с определенной периодичностью просто копируйте старые файлы журнала в резервное хранилище и удаляйте их из основного каталога.
Глубина хранения журнала должна быть минимальной. Это даст вам гарантию, что даже если кто-то запустит в рабочее время сложный поиск по журналу без ограничений по периоду, то он не положит всю базу.
А для разбора полетов вы всегда можете скопировать файлы журнала обратно, хотя на рабочей базе лучше такого не делать, а использовать копию.
Post #5473
3.15K