Парсинг технологического журнала 1С средствами SQL CLR

29.11.11

База данных - Технологический журнал

В статье рассказывается о том как реализовать парсинг (разбор) файлов технологического журнала c помощью SQL CLR, а также настроить хранение информации из него в базе данных.
В статье приведен полный листинг функции, а также примеры использования.

Скачать файлы

Наименование Файл Версия Размер
Парсинг файлов технологического журнала 1С с помощью SQL CLR
.docx 70,69Kb
124
.docx 70,69Kb 124 Скачать
Скомпилированная сборка
.dll 7,50Kb
64
.dll 7,50Kb 64 Скачать
Листинг ParseLog.cs
.cs 11,84Kb
78
.cs 11,84Kb 78 Скачать

Зачем нужен парсер файлов технологического журнала?

     Читать данные в текстовом виде не слишком удобно, особенно если нам нужно найти какое-либо определенное событие.  Например, текст SQL запроса среди тысяч записей в  десятках папок с идентификаторами рабочих процессов.

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

В приложенных файлах приведен листинг функции, которая отбирает события DBMSSQL из логов ТЖ, остальные события пропускаются. Вы можете переопределить это в тексте модуля, учитывая что число колонок для различных событий может отличаться.

Функция написана на C# и может использовать все расширения классов .NET.

Как это работает ?

Вы открываете SQL Server Management Studio (SSMS), выбираете New Query и набираете следующий текст:

select * from  ParseLogFiles({сетевой каталог с файлами ТЖ})

Функция возвращает вам таблицу с данными технологического журнала как показано на скриншотах. 

Естественно что к результатам можно применять любой функционал T-SQL, например WHERE, ORDER BY или JOIN, например:

select distinct SqlText,CONTEXT from  ParseLogFiles({сетевой каталог с файлами ТЖ})

where BaseName= 'YourBaseName' and CONTEXT is not null

Таким образом поиск контекста исполнения любого запроса, попавшего в журнал становится делом нескольких секунд.

Кроме того, в статье подробно описано как сохранять результаты выполнения этой функции на периодической основе, чтобы в дальнейшем сделать консолидированный анализ за период. Например отобрав самые "проблемные" участки кода за неделю, как первые кандидаты на оптимизацию.

Полностью статья доступна в приложенном файле.  В дополнительных файлах можно скачать текст функции или уже откомпилированную сборку этой функции.

P. S. Можно пойти еще дальше и соединить результаты, возвращаемые функцией, с результатами некоторых DMV и получить максимально полную информацию в одной таблице. Например, на скриншоте приведено суммарное время выполнения запросов в SQL с контекстом исполнения в 1С (описание того как получить такой результат уже к сожалению выходит за рамки данной статьи).

 



См. также

Магия преобразований Vector, часть 2: технологический журнал

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

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

1 стартмани

15.11.2023    765    4    AlexSTAL    0    

8

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

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

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

1 стартмани

13.11.2023    2967    4    AlexSTAL    0    

42

«Монитор» – простой анализ производительности

Администрирование СУБД Технологический журнал Бесплатно (free)

Для расследования проблем производительности недостаточно просто проанализировать технологический журнал. Нужен парсинг контекста событий, его сопоставление с информацией из Extended Events и логов, агрегация огромного количества информации.

21.09.2023    5722    Andreynikus    14    

79

Экспорт технологического журнала 1С в Elastic с помощью Logstash

Технологический журнал Платформа 1С v8.3 Абонемент ($m)

Целью данного решения является организация хранения и анализа данных из технологического журнала 1С с использованием стека Elasticsearch + Logstash + Kibana.

5 стартмани

18.09.2023    3276    huxuxuya    3    

23

Мобильный помощник эксперта 1С (приложение android, позволяющее строить отчеты на СКД по логам технологического журнала и не только)

Технологический журнал Мониторинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

16.05.2023    3317    capitan    0    

23

Разбор технологического журнала без боли и страданий

Технологический журнал Абонемент ($m)

Технологический журнал - мощный инструмент логирования, используемый для анализа проблем производительности 1С. Но он обладает одним огромным недостатком, в "сыром виде" он почти не поддается адекватному анализу из-за своей структуры. Существует довольно много способов "разобрать" технологический журнал, но все опробованные способы обладают теми или иными недостатками. Предлагаю вам мой вариант "велосипеда" для разбора ТЖ и хранения разобранного в различных форматах.

1 стартмани

12.12.2022    8154    37    Segate    26    

86

Выполняем в СУБД запрос из ТЖ

Технологический журнал Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для подстановки или нумерации параметров в тексте запроса из технологического журнала.

1 стартмани

24.11.2022    2856    3    VKislitsin    1    

17
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. squad 181 29.11.11 16:00 Сейчас в теме
В статье рассказывается о том как реализовать парсинг (разбор) файлов технологического журнала c помощью SQL CLR, а также настроить хранение информации из него в базе данных.
В статье приведен полный листинг функции, а также примеры использования.

Перейти к публикации

1. cool.vlad4 2 29.11.11 16:00 Сейчас в теме
укажи, как включать sql clr
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
если это есть в статье - извиняй, не увидел
ЗЫ sql clr кстати по сравнению с обычным t-sql по производительности превосходит в случаях разбора строк и текстов
ЗЫ да и заслуженный +
ЗЫЗЫ Как-то некрасивенько
 while (1 == 1) 
           {
           str = sr.ReadLine();
           sContext = sContext + " " + str;
           if (str.Contains("'")) break;
       }

но ничего еще раз спс,
mant; cleaner_it; squad; +3 Ответить
2. squad 181 29.11.11 17:15 Сейчас в теме
(1) cool.vlad4, Да, в статье про то как "включается" CLR написано. Вот кстати небольшое дополнение: если Reconfigure будет выдавать ошибку можно попробовать Reconfigure With Override.

Приведенный фрагмент кода некрасивый - с этим согласен, но тут уж скорее вопросы к формату текстового файла 1С. Ловить так кроме этой кавычки нечего :)

Был бы лог в виде структурированного текста, например в формате XML - был бы красивый код.
3. Sunhare 4 08.12.11 17:22 Сейчас в теме
4. vbuots 20 15.02.12 13:16 Сейчас в теме
Если всё прошло удачно, то вне зависимости от способа которым мы погружали сборку, можно увидеть нашу новую функцию открыв SMSS на ветке Functions>Table-valued Functions, примерно как показано на рисунке:

У меня он создал в ветке "Programmability" - "Assemblies", с именем "parselog". Вопрос, что дальше, создавать функцию руками?(как?) или как к ней обращаться в таком случае?
5. vbuots 20 15.02.12 14:13 Сейчас в теме
(4) vbuots,
а саму функцию не создал
Invalid object name 'dbo.ParseLogFiles'.
9. squad 181 18.06.12 16:01 Сейчас в теме
(5) vbuots,
Имя вашей базы указали ?
6. opiumdx 17.02.12 10:46 Сейчас в теме
Спасибо, очень емкая и интересная статья, я понял что шел неверной дорогой.))
7. ozaycev 146 18.06.12 15:51 Сейчас в теме
У меня он создал в ветке "Programmability" - "Assemblies", с именем "parselog". Вопрос, что дальше, создавать функцию руками?(как?) или как к ней обращаться в таком случае?

У меня та же ситуация. Где код SQL функции???
8. squad 181 18.06.12 16:00 Сейчас в теме
Откройте SSMS-New Query
Вставьте ваш код, например select * from <ИмяВашейБазы>.dbo.ParseLogFiles('<ИмяКаталогаФайловТЖ>','*.*')
10. It-developer 24 19.09.12 12:59 Сейчас в теме
Добрый день!
Делаю все по статье. Создалась функция "Programmability" - "Assemblies", с именем "parselog". Пытаюсь выполнить запрос select * from <ИмяВашейБазы>.dbo.ParseLogFiles('<ИмяКаталогаФайловТЖ>','*.*'). Но у меня нет таблицы dbo.ParseLogFiles. Что делать подскажите, пожалуйста
11. squad 181 19.09.12 13:14 Сейчас в теме
Собственно таблицы ParseLogFiles и не должно быть - это функция, которая возвращает таблицу, поэтому мы можем обратиться к ней с помощью select
Функция создалась в Assemblies выбранной вами базы или в другой базе ?
12. It-developer 24 19.09.12 13:21 Сейчас в теме
Да, создалась в Assemblies в выбранной мной базе
13. squad 181 19.09.12 13:44 Сейчас в теме
В таком случае должно работать.
Ошибку какую выдает ?
14. It-developer 24 19.09.12 14:21 Сейчас в теме
Код запроса:
use test2
select * from dbo.parselog('z:\\Bases\\Project_Parse1c\\rphost_1972\\', '*.log')
Ошибка:
Msg 208, Level 16, State 1, Line 2
Invalid object name 'dbo.parselog'.
15. squad 181 19.09.12 14:31 Сейчас в теме
Попробуйте прямо указать:

select * from test2.dbo.parselog('z:\\Bases\\Project_Parse1c\\rphost_1972\\', '*.log')
16. It-developer 24 19.09.12 14:36 Сейчас в теме
(15)
Тоже ошибка
Msg 208, Level 16, State 1, Line 1
Invalid object name 'test2.dbo.parselog'.
17. squad 181 19.09.12 14:43 Сейчас в теме
В свойствах сборки (на сборке - правой кнопкой Properties),
General - Permission Set что указано ?
18. It-developer 24 19.09.12 14:47 Сейчас в теме
19. It-developer 24 20.09.12 16:16 Сейчас в теме
Не знаете что еще может быть?
20. squad 181 21.09.12 07:26 Сейчас в теме
Попробуйте создать новую пустую базу данных и погрузить сборку в неё.
Этим покрайней мере исключим возможные проблемы с нехваткой прав на существующей БД и проблемами при погружении сборки в неё.
21. It-developer 24 21.09.12 18:30 Сейчас в теме
У меня Table-value Function создалась только после создания таблицы TechJournal и
запуска такого кода:

CREATE FUNCTION [dbo].[ParseLogFiles] ( @str nvarchar(4000), @str2 nvarchar(4000) )
RETURNS table
AS return (
select * from pustaya.dbo.TechJournal
)
GO

затем я сделал select * from dbo.ParseLogFiles ('z:\Bases\Project_Parse1c\rphost_1972', '*.log') - ошибок не выдало (Уффф... - не так просто было получить, я ж со всем этим в 1-й раз работаю, но хелпы помогают хорошо).
На выходе - пустая таблица. Вопрос в связи с этим: какая должна быть структура *.log файла 1с(можно пример, который загрузится)? Или как настроить технологический журнал?
22. squad 181 24.09.12 10:49 Сейчас в теме
Я чего-то не пойму, вы описали функцию которая выбирает записи из таблицы TechJournal ?
Что кроме содержимого TechJournal может вернуть вам эта функция ?
23. zels 171 30.08.16 11:59 Сейчас в теме
Что означает фраза (сборка с VS2010)
10. Выберите Build > Deploy (yourProjectName). Этим вы погрузите ваш класс и все его функции в базу данных, которую указали в п. 3

Я собирал в соотвествии с "как создать CLR функцию без Visual Studio", там подобного пункта нет.
Может? поэтому ParseLog появился в сборках, а не в функциях и ничего не работает:

ошибка Сообщение 208, уровень 16, состояние 1, строка 1
Недопустимое имя объекта "test.dbo.parselog".

Если test / dbo убрать, будет то же самое
Прикрепленные файлы:
Оставьте свое сообщение