Перейти к основному содержимому
Версия: 7.0

Профайлер

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

Запуск и остановка

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

Граф вызовов

Каждая запись профайлера соответствует дуге — паре (вызывающий, вызываемый) в контексте пользователя и формы. Дуги образуют ориентированный граф: один и тот же вызываемый может быть вершиной нескольких дуг с разными вызывающими, и один и тот же вызывающий — началом нескольких дуг с разными вызываемыми. Граф можно обходить в обе стороны — вниз от заданного свойства к тем, что он вызывает, и вверх к тем, что вызывают его.

Метрики

Для каждой дуги профайлер хранит исходные метрики:

МетрикаСмысл
Число вызововСколько раз дуга была пройдена за интервал
Полное времяСумма времени выполнения вызываемого, включая всё, что он вызывает
Минимальное и максимальное времяГраницы по отдельным вызовам
Сумма квадратов времёнИспользуется для вычисления среднего квадратичного времени выполнения
Время SQLЧасть полного времени, проведённая в ожидании сервера БД
Время взаимодействия с пользователемЧасть полного времени, проведённая в ожидании пользовательского ввода или ответа клиентской части

Из них профайлер вычисляет производные метрики:

МетрикаПравило
Среднее времяПолное время, делённое на число вызовов
Среднее квадратичное времени выполненияsqrt(сумма квадратов времён / число вызовов)
Полное время без ожиданияПолное время минус время взаимодействия с пользователем
Полное Java-времяПолное время без ожидания минус время SQL
Собственное время без ожиданияПолное время без ожидания минус та же метрика, просуммированная по вызываемым
Собственное время SQLВремя SQL минус время SQL, просуммированное по вызываемым
Собственное Java-времяПолное Java-время минус полное Java-время, просуммированное по вызываемым

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

Представление данных

Собранные данные показываются на нескольких вкладках:

ВкладкаЧто показывает
НастройкиЗапуск/остановка профайлера, выбор активных метрик, фильтры по пользователю и форме
Горячие точкиПлоский список свойств и действий, отсортированный по выбранной метрике
Дерево вызововИерархическое представление дуг — вниз (что вызывает выбранный узел) и вверх (кто вызывает его)
Сырые данныеПолный список дуг для произвольного анализа

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

Параметры анализа планов запросов

На той же форме на отдельной вкладке SQL настраиваются параметры, влияющие на сбор планов выполнения SQL-запросов в логи (см. Журналы и логи):

ПараметрСмысл
Без анализаЗапрашивать у сервера БД план запроса в облегчённом режиме, без фактического выполнения
Java-стекВключать в лог Java-стек, с которого был порождён запрос
План компиляцииЛогировать и план компиляции, а не только план исполнения
Порог времениМинимальное время выполнения запроса, начиная с которого его план попадает в лог

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