Профайлер
Профайлер — встроенный механизм платформы, собирающий статистику исполнения свойств и действий за заданный промежуток времени и представляющий её как граф вызовов с агрегированными метриками. В отличие от монитора процессов, который показывает состояние системы на текущий момент, профайлер описывает поведение системы за прошедший интервал.
Запуск и остановка
Сбор данных управляется парой действий Запустить профилирование и Остановить профилирование, доступных на форме Администрирование > Система > Профайлер. От запуска до остановки платформа записывает обращения к свойствам и действиям; данные накапливаются на сервере приложений и становятся доступны для анализа после остановки профилирования.
Граф вызовов
Каждая запись профайлера соответствует дуге — паре (вызывающий, вызываемый) в контексте пользователя и формы. Дуги образуют ориентированный граф: один и тот же вызываемый может быть вершиной нескольких дуг с разными вызывающими, и один и тот же вызывающий — началом нескольких дуг с разными вызываемыми. Граф можно обходить в обе стороны — вниз от заданного свойства к тем, что он вызывает, и вверх к тем, что вызывают его.
Метрики
Для каждой дуги профайлер хранит исходные метрики:
| Метрика | Смысл |
|---|---|
| Число вызовов | Сколько раз дуга была пройдена за интервал |
| Полное время | Сумма времени выполнения вызываемого, включая всё, что он вызывает |
| Минимальное и максимальное время | Границы по отдельным вызовам |
| Сумма квадратов времён | Используется для вычисления среднего квадратичного времени выполнения |
| Время SQL | Часть полного времени, проведённая в ожидании сервера БД |
| Время взаимодействия с пользователем | Часть полного времени, проведённая в ожидании пользовательского ввода или ответа клиентской части |
Из них профайлер вычисляет производные метрики:
| Метрика | Правило |
|---|---|
| Среднее время | Полное время, делённое на число вызовов |
| Среднее квадратичное времени выполнения | sqrt(сумма квадратов времён / число вызовов) |
| Полное время без ожидания | Полное время минус время взаимодействия с пользователем |
| Полное Java-время | Полное время без ожидания минус время SQL |
| Собственное время без ожидания | Полное время без ожидания минус та же метрика, просуммированная по вызываемым |
| Собственное время SQL | Время SQL минус время SQL, просуммированное по вызываемым |
| Собственное Java-время | Полное Java-время минус полное Java-время, просуммированное по вызываемым |
Группа собственных метрик относит время к самому свойству или действию, а не к его вложенным вызовам — это позволяет выделить горячую точку даже тогда, когда основное время уходит во вспомогательные общие свойства, которые она вызывает.
Представление данных
Собранные данные показываются на нескольких вкладках:
| Вкладка | Что показывает |
|---|---|
| Настройки | Запуск/остановка профайлера, выбор активных метрик, фильтры по пользователю и форме |
| Горячие точки | Плоский список свойств и действий, отсортированный по выбранной метрике |
| Дерево вызовов | Иерархическое представление дуг — вниз (что вызывает выбранный узел) и вверх (кто вызывает его) |
| Сырые данные | Полный список дуг для произвольного анализа |
Фильтры по пользователю и форме сужают выборку до конкретного контекста; при этом метрики пересчитываются от того же исходного набора данных, повторный запуск профайлера не требуется.
Параметры анализа планов запросов
На той же форме на отдельной вкладке SQL настраиваются параметры, влияющие на сбор планов выполнения SQL-запросов в логи (см. Журналы и логи):
| Параметр | Смысл |
|---|---|
| Без анализа | Запрашивать у сервера БД план запроса в облегчённом режиме, без фактического выполнения |
| Java-стек | Включать в лог Java-стек, с которого был порождён запрос |
| План компиляции | Логировать и план компиляции, а не только план исполнения |
| Порог времени | Минимальное время выполнения запроса, начиная с которого его план попадает в лог |
Эти параметры — отдельный механизм, не входящий в собранный профайлером граф, но обычно используемый параллельно для углублённого анализа конкретных «горячих точек».