Сжатие журнала регистрации в формате SQLite (.lgd) с помощью программы "DB Browser for SQLite".

04.06.17

База данных - Журнал регистрации

Если журнал регистрации базы 1С заметно увеличился, Вы не сможете оперативно искать в нем нужную информацию. Более того, работа с таким журналом может вызывать блокировку работы всех пользователей. Для предотвращения разрастания журнала необходимо устранять настройками запись ненужных событий и перемещать в архивы события с неактуальными датами. Избавиться от уже записанной ненужной информации можно с помощью программы DB Browser for SQLite указанным в этой статье способом.

Порядок действий:

  1. Открыть файл  со списками баз  сервера 1С, найти в файле нужную запись поиском по имени базы. По найденной записи определить каталог хранения журнала нужной базы. 

Пример: 

Текст в файле:

{2ae78977-e8b2-4f7f-b31f-1f10edf9ae05,"Test_Base_001","","MSSQLServer","MyServer\Five","Test_Base_001","sa","nCOQ5/A0Nn/x3dLF/qZTwX+Ro0XYwOmsUMIgnklDHBs=","CrSQLDB=Y;DB=Test_Base_001;DBMS=MSSQLServer;DBSrvr=MyServer

Каталог  журнала:

C:\Program Files\1cv8\srvinfo\reg_1541\2ae78977-e8b2-4f7f-b31f-1f10edf9ae05\1Cv8Log)

  1. Остановить 1С Сервер.
  2. Сделать резервную копию каталога с журналом  1CV8Log.

  1. Скачать и установить программу "DB Browser for SQLite" с официального сайта:

http://sqlitebrowser.org

  1. Открыть базу журнала в программе (обязательно выбрать тип файла All Files)

  1. Определить признаки для поиска ненужной информации журнала и вставить в указанный ниже пример кода ( можно использовать  приведенный код без изменений-если это конфигурации на основе Бухгалтерия 3.0).

Пример для конфигураций на основе Бухгалтерия 3.0

6.1 Удаление записей с отбором по кодам событий:

Drop table Filter;

Create table Filter(Code int, name TEXT);

INSERT INTO Filter (Code,name) SELECT code,name from EventCodes where name Like '%СПАРК%';

INSERT INTO Filter (Code,name) SELECT code,name from EventCodes where name Like '%Новости%;'

delete from EventLog where EventCode in (Select code from Filter);

  1. 2 Удаление записей с отбором  по видам метаданных:

Drop table Filter;

Create table Filter(Code int, name TEXT); 

INSERT INTO Filter (Code,name) SELECT code,name from MetadataCodes where name Like '%ДанныеМонитораРуководителя%';

INSERT INTO Filter (Code,name) SELECT code,name from MetadataCodes where name Like '%бит_фн_Оповещения%';

INSERT INTO Filter (Code,name) SELECT code,name from MetadataCodes where name Like '%бит_фн_РегистрацияСобытийОповещений%';

delete from EventLog where MetadataCodes in (Select code from Filter);

  1. 3 Удаление всех записей с пустым полем Метаданные

Delete from EventLog where metadataCodes="";

7.

Копируем код группами в  браузер и выполняем (выделить нужные строки блоком или выбрать одну строку и нажать "F5").

Примечание

(Для проверки кода можно сначала заменить оператор “delete ” на  “ select *”

Можно использовать более сложную команду с присоединением  вспомогательных таблиц, вставляя в нее необходимые условия отбора, например:

Select EL.Date, EL.UserCode, AC.Name,AC.Code , CC.Name,CC.Code from EventLog As EL LEFT OUTER JOIN AppCodes  As AC On EL.AppCode=AC.Code LEFT OUTER JOIN ComputerCodes  As CC On EL.ComputerCode=CC.Code where  AC.Code=3 And EL.computerCode=1 And  EL.rowID <10000

                               Или

Select EL.Date, EL.UserCode, AC.Name,AC.Code , CC.Name,CC.Code from EventLog As EL LEFT OUTER JOIN AppCodes  As AC On EL.AppCode=AC.Code LEFT OUTER JOIN ComputerCodes  As CC On EL.ComputerCode=CC.Code where  where metadataCodes=""   And  EL.rowID <10000)

8.После выполнения команд сохранить результат:

9. Сжать базу журнала

10. Обязательно закрыть  DB Browser for SQLite.

11. Запустить службу 1С Сервера.

12. Проверить результат, если удалили лишнее – тогда снов остановить службу Сервер 1С и возвратить из копии каталог  1Cv8Log.

Примечание:

- До выполнения указанных операций обязательно сделайте копию журнала. Копия рабочей базы тоже не помешает.

- Можно проверить удаление  на копии журнала и увидеть результат, привязав журнал к копии рабочей базы. Если все хорошо – делайте свежую копию журнала и сжимайте рабочий.

- Сначала лучше выполнить операцию с максимальным количеством удаляемых записей (в примере 6.3)

- При указанных настройках у меня журнал сжался с 24 Гб до 1.8 Гб.  Время удаления составило 2 часа.

- Полезные ссылки:

http://forum.infostart.ru/forum9/topic118049/  - обсуждение темы о тонкой настройке событий регистрации

https://1c-programmer-blog.ru/programmirovanie/zhurnal-registracii-v-1s-8.html - описание журнала регистрации, подключение журнала как внешнего источника данных 1С.

http://forum.infostart.ru/forum83/topic144282/  - в обсуждении (ответ 3 - Виталий Чайкин (Vitaly1C8) ) приведен способ сжатия с помощью SQLite 3.

См. также

Журнал регистрации Системный администратор Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

История изменений реквизитов и табличных частей справочников, документов, независимых регистров сведений, возможность отката изменения, восстановление удаленных объектов, сбор статистики использования базы 1С. Альтернативный журнал регистрации.

22800 руб.

22.02.2018    35893    59    54    

56

Журнал регистрации Программист Россия Бесплатно (free)

В материале рассматривается сравнение двух инструментов для работы с журналом регистрации 1С: утилиты ibcmd и платформы Vector. Описаны их функциональные возможности, тестирование производительности и практическое применение для преобразования логов в формат JSON.

20.11.2024    1758    user1913000    12    

20

Журнал регистрации Тестирование QA Программист Бесплатно (free)

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

21.10.2024    3795    leemuar    8    

24

Инструменты администратора БД Журнал регистрации Системный администратор Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    2548    40    dima_gsv    3    

14

Журнал регистрации Мониторинг Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

19.11.2023    1776    6    AlexSTAL    0    

8

Мониторинг Журнал регистрации Технологический журнал Системный администратор Программист Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    5509    11    AlexSTAL    0    

47

Журнал регистрации Инструменты администратора БД Мониторинг Мессенджеры и боты Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Абонемент ($m)

Внешняя обработка для БСП-конфигураций с простым программным интерфейсом. Предназначена для мониторинга состояния системы. Базово реализована отправка ошибок из журнала регистрации, но можно легко добавить мониторинг других журналов, каких-либо действий пользователей, состояния системы (например закрытие месяца).

3 стартмани

26.09.2023    3235    22    doom2good    16    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Jamms 07.06.17 08:23 Сейчас в теме
В линуксе если нужно просто дефрагментировать файл журнала (после сокращения, например), достаточно команды:
find /home/usr1cv8/ -iname "*.lgd" -exec sqlite3 {} VACUUM \;
2. DrSender 82 07.06.17 11:41 Сейчас в теме
В Windows тоже примерно так - если установить SQLite3:

(http://www.w3ii.com/ru/sqlite/sqlite_vacuum.html)

Руководство VACUUM
Ниже приводится простой синтаксис для выдачи команды VACUUM для всей базы данных из командной строки:

$sqlite3 database_name "VACUUM;"
Вы можете запустить VACUUM из SQLite запроса, а также следующим образом:

sqlite> VACUUM;
Вы также можете запустить VACUUM на конкретной таблице следующим образом:

sqlite> VACUUM table_name;


Но мне понравилось работать с DB Browser for SQLite - все удобно, наглядно.
3. DrSender 82 07.06.17 12:19 Сейчас в теме
Скопировал журнал для обработки на более мощный сервер. База журнала 25 Гб - по указанным в статье настройкам время выполнения:

Запрос успешно выполнен: delete from EventLog where metadataCodes="" (заняло 2151460мс, 141438660 строк изменено)
Запрос успешно выполнен: delete from EventLog where EventCode in (Select code from Filter); (заняло 321319мс, 2807 строк изменено)
Запрос успешно выполнен: delete from EventLog where MetadataCodes in (Select code from Filter); (заняло 292202мс, 2067792 строк изменено)

И примерно 10-20 минут на сжатие.
4. AlexO 136 08.09.18 17:49 Сейчас в теме
Странное "сжатие"... Сжатие - путем удаления?
Определить признаки для поиска ненужной информации журнала

Лог и подразумевает, что в него попадают все сообщения, там нет понятия "ненужная информация".
Есть "полная информация", и "отбор".
По каким вообще критериям здесь определяется "ненужная информация"?
Нормальная обрезка лога - это сохранение данных с даты до даты, усечение лога, и сжатие пустого пространства.
А тут - ну давайте, все сообщения вообще очистим, совсем хороший лог будет, в ноль, чистый и маленький.
Этот метод, кстати, и у Гилева описан, так что - неудивительно, что рабочий, но безграмотный в плане обработки БД. Там у него сообщения о фоновых заданиях удаляются - которые, например, вообще являются основными в базах, где все завязано на обмен.
aleks.public; +1 Ответить
5. DrSender 82 12.09.18 12:15 Сейчас в теме
Я показал методику с конкретными примерами. Каждый может удалить только то, что ему не нужно. Думаю, что каждый разберется, что ему оставить в логе.

Нас больше всего интересует история изменения объектов - кто, когда и каким способом, причем за достаточно длительный период - поэтому обрезать период неудобно.
6. ice-net 19 27.01.20 11:26 Сейчас в теме
(0) Спасибо, Очень полезно!
сильно разросся лог за 3 года около 30 ГБ, решили удалить все записи только по изменению регистров.

delete from EventLog where metadataCodes in ( select code from metadataCodes where (Name like '%РегистрСведений%') or (Name like '%РегистрНакопления%') );


Подскажите, не может Вы сталкивались с тем, что в колонке metadataCodes таблицы EventLog стоят значения разделенные пробелом и не соответсвуют данным в таблице metadataCodes ?
Оставьте свое сообщение