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

12.07.22

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

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

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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

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

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

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

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

 

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

Почему plotly?

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

 

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

 

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

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

 

 

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

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

 

 

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

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

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

 

 

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

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

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

 

 

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

 

 

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

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

 

 

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

 

 

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

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

 

 

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

HighLoad оптимизация Инструментарий разработчика Технологический журнал Разработчик 1С 8.3 Россия Абонемент ($m)

Скрипт tj_baseline.py собрал акт замеров из технологического журнала: 7 повторов до и 7 после замены запросов в цикле на «Нано-УТ 2.0». Справка на 150 строк ускорилась с 817,0 до 145,0 мс, проверка доступности с 301,3 до 2,2 мс. При 120 и 300 вызовах в день и ставке 800 руб. выгода 9353 руб. в год по журналу, 4939 руб. по секундомеру без журнала. В архивах скрипт, тесты, журналы опыта, образец приложения к договору и калькулятор.

7 стартмани

27.10.2026    260    Ninel_S    0    

1

HighLoad оптимизация Администрирование СУБД Технологический журнал Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Проверила на стенде совет «сортируйте строки перед записью»: 1С 8.3.27 на PostgreSQL, учебная «Нано-УТ», 20 потоков и по 2000 документов на каждый способ записи движений. Взаимоблокировки дают построчный захват (99 % ошибок) и повышение разделяемой блокировки до исключительной (95 %, сортировка не помогает); одна блокировка на весь набор работает без сортировки. Плюс механика PostgreSQL, дерево ожиданий через pg_blocking_pids, TDEADLOCK в журнале и единицы порога TLOCK в logcfg.xml. В архиве стенд, выгрузка конфигурации и журналы прогона.

5 стартмани

22.10.2026    391    Ninel_S    10    

1

Журнал регистрации Инструменты администратора БД Технологический журнал Мониторинг Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Управление торговлей 11 Абонемент ($m)

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

3 стартмани

19.10.2026    442    6    windsurf    0    

3

HighLoad оптимизация Технологический журнал Сервера Запросы Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Составной отчет формировался 15 минут. Вместо перебора разделов одна команда rac показала, что сеанс занят запросом к СУБД, а временный техжурнал с порогом 20 секунд за один прогон назвал виновника: один SQL на 240 секунд и точную строку модуля. В статье четыре разные картины «висит» и как их различить: идет запрос в СУБД, клиент ждет невидимое модальное окно, зомби-вызов после закрытого клиента, зависшее фоновое задание. Пример logcfg.xml, разбор события DBMSSQL с полем Context, замер пакета запросов по временным таблицам, регламентное задание, которое «выполнено», а данные стоят, и шпаргалка по диагностике.

16.10.2026    1054    Konstmax13    6    

2

Технологический журнал Сервера EDT Обновление 1С Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Конфигуратор и агент EDT тихо вылетают на 0 % «Обработки структуры базы данных», EDT пишет «Потеряно соединение с агентом конфигуратора», а модель проекта при этом чистая. Разбор двух аварий на большой серверной базе БП КОРП: какие факты снимать (журнал Windows, техжурнал нужной версии, хвост лога процесса), почему инкрементальная выгрузка EDT ломается после сбоев, как довести обновление пакетно через /UpdateDBCfg -Server, как опознать свои rphost среди нескольких кластеров и снять агент EDT, который сам поднимается и держит базу. Протокол одного дня по минутам и порядок диагностики из восьми шагов.

15.10.2026    433    Konstmax13    0    

0

HighLoad оптимизация Технологический журнал Разработчик 1С:Предприятие 8 Бесплатно (free)

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

21.09.2026    1353    markbraer    1    

5

Технологический журнал Системный администратор Разработчик 1С 8.3 Бесплатно (free)

База ERP, 400 пользователей, сервер загружен, 1С подвисает, доступа к SQL Server нет. Оптимизировать можно бесконечно, вопрос в том, с чего начать. ЦУП это платная лицензия и отдельная стройка, а технологический журнал встроен в платформу, включается одним файлом и на боевой базе в рабочее время не вызвал ни одной жалобы от пользователей. Разбираю, что он собой представляет, где лежит настройка, как читается строка события и что означает каждое из одиннадцати событий, которые я видел в журналах боевой ERP. Плюс рабочий logcfg.xml, три ловушки, на которых отчёт получается красивым и неверным, и шесть находок за один прогон.

07.09.2026    2420    nedomolkov.ivan    0    

3

Технологический журнал Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Обработка включает технологический журнал, читает его и отвечает на 13 вопросов человеческим языком: кто блокирует базу, какой запрос к СУБД самый тяжёлый, какой код суммарно грузит СУБД больше всех, какой вызов съедает память. Настройка идёт галочками с человеческими формулировками, logcfg.xml обработка пишет сама, права администратора для этого обычно не нужны. Отдельная кнопка сводит журнал в один markdown-файл: на боевой ERP 288 МБ и 2 055 229 строк ужались в 17 459 знаков, файл кладётся в чат с нейросетью и разбирается за минуту. Имена баз и пользователей в нём заменены псевдонимами. Без внешних компонент, к СУБД обращений нет.

10 стартмани

07.09.2026    1447    6    nedomolkov.ivan    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mrChOP93 100 13.07.22 06:36 Сейчас в теме
А сама программа для скачивания представлена будет?
maXon777; +1 – Ответить
5. sinichenko_alex 221 19.07.22 06:18 Сейчас в теме
(1) Наверное не для скачивания, а все же для запуска. Вообще судя из расширения файла это скрипт для питона, устанавливайте питон на ПК и вперед.
6. mrChOP93 100 19.07.22 06:40 Сейчас в теме
(5) Когда я писал комментарий, к публикации не было приложено файла
2. Eugeeny 53 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 4989 13.07.22 21:25 Сейчас в теме
Идея интересная, но вот при большом количестве пользователей картинка превращается в не воспринимаемую, на мой взгляд. Тут наверное только сверточные сети тренировать на выявления проблем. Или еще что-то придумать.
4. Eugeeny 53 14.07.22 06:49 Сейчас в теме
Да, такая проблема есть, но можно ограничить выборку по длительности события с помощью переменной limit_duration, например, указать 1 000 000, то есть 1секунда. Это может сократить количество пользователей.
Для отправки сообщения требуется регистрация/авторизация