Графическое представление технологического журнала, или Гант наглядности

12.07.22

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

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

Скачать исходный код

Наименование Файл Версия Размер
Графическое представление технологического журнала, или Гант наглядности:
.py 8,90Kb
62
.py 8,90Kb 62 Скачать бесплатно

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

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

Выберем из ТЖ события: SDBL, DBMSSQL, TLOCK, TDEADLOCK, TTIMEOUT. Сделать это можно либо посредством соответствующей настройки файла logcfg.xml, либо, обработав полный ТЖ скриптом, к слову, скриптами воспользоваться всё равно пришлось, хотя бы для того, чтобы привести файл ТЖ к виду, когда каждое событие занимает одну строку.

Итак, как же изобразить полученный ТЖ?

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

Так выглядит ТЖ, собранный при выполнении нагрузочного тестирования.

 

Немного о том, как эта диаграмма была построена. Анализом ТЖ занимался код, написанный на python, а непосредственная визуализация была доверена одной из его библиотек - plotly.

Почему plotly?

Главным образом потому, что она интерактивна, позволяет масштабировать диаграмму.

 

Получаем выделенный фрагмент.

 

Что же из этого можно понять?

Договоримся об обозначениях. Рассмотрим одну транзакцию одного пользователя.

 

 

Как видно, состояние одного пользователя характеризуется двумя линиями (прямоугольниками) верхней и нижней. Нижняя показывает транзакцию, как правило она зелёного цвета, верхняя – ожидание (жёлтого или оранжевого цвета, в зависимости от того, дождались или нет) или выполнение запроса (синего цвета).

Рассмотрим фрагмент диаграммы

 

 

Транзакция выделяется жёлтым цветом, если она является виновником ожидания. Хорошо видно, что в момент времени, когда закончилась «жёлтая» транзакция, закончилось ожидание в транзакции пользователя Админ_ТЦ0000004_1482. Кроме свойства интерактивности библиотека plotly позволяет передавать произвольные данные в диаграмму, а после просматривать, наведением курсора на заинтересовавшую линию (событие). Для ожидания имеет смысл анализировать заблокированный ресурс и пользователя, чья транзакция его держит, что и отражено на представленной выше диаграмме.

Итак, посчитав количество «жёлтых» транзакций, получаем представление о количестве ожиданий на управляемых блокировках в системе.

Аналогичным образом дело обстоит с таймаутами с той лишь разницей, что ожидание не дождавшейся ресурса транзакции оранжевого цвета, как и транзакция-виновник.

 

 

Транзакция-жертва заканчивается вместе с прерванным ожиданием.

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

 

 

Для анализа запросов, кроме контекста, отображается длительность.

 

 

Обратимся к диаграмме ТЖ реальной базы, на качество работы которой есть жалобы со стороны пользователей.

 

 

Визуально определим область наибольшей концентрации событий. Диаграмма, построенная библиотекой plotly, позволяет менять фокусировку и возвращаться к исходному виду без её повторного перестроения.

 

 

Сразу определим контекст самого долгого запроса, впрочем, необязательно он должен быть самым проблемным.

 

 

За что зацепиться?

Просто просматривать контексты всех запросов довольно бессмысленное занятие, хотя и не отнимающее много времени. Но всё-таки есть несколько вещей, обращающих на себя внимание.

 

 

Во-первых, работа пользователя _93 (в красном прямоугольнике). Необычно то, что действия почти регулярны, и несмотря на то, что пунктиры выглядят маленькими, в действительности их длительность варьируется от 1,5 до 7 секунд, и кроме того, все эти события имеют схожий контекст.

 

 

Во-вторых, красными вертикальными линиями показаны моменты времени, в которые количество одновременно выполнявшихся запросов больше среднего. Можно говорить о том, что в некоторые из этих моментов процессор мог быть перегружен, и в случае, когда счётчик загрузки процессора это подтверждает, на контексты этого участка следует обратить внимание, но быть уверенным в том, что эти запросы в принципе являются узким местом, нельзя.

В-третьих, внимания заслуживают запросы в транзакциях, поскольку здесь могут быть блокировки, эскалация блокировок, в том числе на СУБД.

 

 

Однако, вот что интересно, если подвергнуть файл ТЖ анализу скриптом, то результат будет выглядеть так:

 

 

Эти контексты уже попадали в поле нашего зрения…

Возможен и иной взгляд в рамках графической парадигмы. Будем отображать только событие DBMSSQL, но раскрашивать станем в соответствии с контекстом таким образом, что контекст первой в рейтинге суммарной длительности будет красный, второй – оранжевый, третий – зелёный, четвёртый – синий, пятый – фиолетовый, а все прочие контексты будут отмечены чёрным.

 

 

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

Этим вариантом графический подход не исчерпывается. В ТЖ ещё много событий, на которые было бы интересно посмотреть в развёрнутом во времени виде.

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

ТЖ Технологический журнал Диаграмма Гант Анализ Python Plotly Блокировка Взаимоблокировка

См. также

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

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

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

1 стартмани

15.11.2023    836    4    AlexSTAL    0    

8

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

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

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

1 стартмани

13.11.2023    3150    4    AlexSTAL    0    

42

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

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

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

21.09.2023    5891    Andreynikus    14    

80

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

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

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

5 стартмани

18.09.2023    3488    huxuxuya    3    

23

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

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

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

16.05.2023    3439    capitan    0    

23

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

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

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

1 стартмани

12.12.2022    8364    39    Segate    26    

88

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

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

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

1 стартмани

24.11.2022    2900    3    VKislitsin    1    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mrChOP93 96 13.07.22 06:36 Сейчас в теме
А сама программа для скачивания представлена будет?
maXon777; +1
5. sinichenko_alex 178 19.07.22 06:18 Сейчас в теме
(1) Наверное не для скачивания, а все же для запуска. Вообще судя из расширения файла это скрипт для питона, устанавливайте питон на ПК и вперед.
+
6. mrChOP93 96 19.07.22 06:40 Сейчас в теме
(5) Когда я писал комментарий, к публикации не было приложено файла
+
2. Eugeeny 49 13.07.22 07:31 Сейчас в теме
Файл с кодом добавлен. Но для его корректной работы, необходимо внести незначительные изменения в библиотеку plotly, в метод _gantt. Найти нужное место можно по первым двум строкам-комментариям
# If group_tasks is True, all tasks with the same name belong
# to the same row.
groupID = index
if group_tasks:
groupID = task_names.index(tn)
if tasks[index]["resource"] == 'SDBL' or tasks[index]["resource"] == 'SDBLw' \
or tasks[index]["resource"] == 'SDBLt' or tasks[index]["resource"] == 'SDBLd':
tasks[index]["y0"] = groupID - bar_width
tasks[index]["y1"] = groupID
else:
tasks[index]["y0"] = groupID
tasks[index]["y1"] = groupID + bar_width
+
3. ivanov660 4344 13.07.22 21:25 Сейчас в теме
Идея интересная, но вот при большом количестве пользователей картинка превращается в не воспринимаемую, на мой взгляд. Тут наверное только сверточные сети тренировать на выявления проблем. Или еще что-то придумать.
+
4. Eugeeny 49 14.07.22 06:49 Сейчас в теме
Да, такая проблема есть, но можно ограничить выборку по длительности события с помощью переменной limit_duration, например, указать 1 000 000, то есть 1секунда. Это может сократить количество пользователей.
+
Оставьте свое сообщение