Мониторинг транзакций

Страница Мониторинг транзакций находит @Transactional методы, которые держат соединение с базой данных дольше, чем нужно: блокирующие сетевые вызовы, запросы N+1 и пагинацию в памяти внутри транзакции. Для каждой проблемы показано, где она возникает, чтобы вы могли найти это место в коде.

СкриншотыСкриншоты соответствуют последнему минорному релизу Axelix.

главная страница мониторинга транзакций

Страница «Мониторинг транзакций» в интерфейсе Axelix

Пока транзакция открыта, она держит соединение с базой данных из пула. Если внутри транзакции выполняется лишняя работа: вызов другого сервиса, отдельный запрос на каждую запись или загрузка всей таблицы ради одной страницы, — соединения заканчиваются, и под нагрузкой приложение замедляется. По коду это редко заметно. Мониторинг транзакций показывает, какие @Transactional методы так делают и где именно.

Страница доступна только для чтения всем пользователям, прошедшим аутентификацию: ее могут открыть VIEWER, EDITOR, ADMIN и SUPER_ADMIN. Полную матрицу ролей и полномочий см. в разделе Роли и полномочия.

Что показывает страница

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

Раскройте транзакцию, чтобы увидеть:

  • где возникла каждая проблема: вызванный URL, сущность и ассоциацию или сущность, разбитую на страницы в памяти;
  • распространение и уровень изоляции транзакции;
  • доступ: только чтение или чтение и запись.

Если ни в одной транзакции проблем нет, страница сообщает об этом вместо списка.

Обнаруженные проблемы

  • Блокирующий сетевой вызов: транзакция делает HTTP-вызов и держит соединение, пока ждёт ответа. Axelix показывает метод и URL запроса. Сейчас Axelix обнаруживает вызовы через RestTemplate.
  • Запросы N+1: ленивая ассоциация загружается отдельным запросом на каждую запись. Axelix показывает сущность и ассоциацию и учитывает её, только если она загружалась больше одного раза.
  • Пагинация в памяти: Pageable сочетается с JOIN FETCH, поэтому Hibernate загружает весь результат и выделяет страницу в памяти. Axelix показывает сущность или таблицу.

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

Axelix Spring Boot Starter отслеживает каждый вызов @Transactional метода внутри приложения и замеряет его время. Пока транзакция открыта, он записывает HTTP-вызовы через RestTemplate и ленивые загрузки ассоциаций Hibernate, а также перехватывает предупреждение Hibernate о пагинации в памяти в логах приложения (Logback или Log4j2). Агент или APM-инструмент не требуется.

MCP-инструменты

ИИ-агенты могут получить через MCP запросы N+1 и пагинацию в памяти, найденные в транзакциях приложения, для всего приложения или для одного класса или метода. Блокирующие сетевые вызовы туда не входят. См. Каталог MCP-инструментов.

Свойства

Мониторинг транзакций включён по умолчанию. Чтобы полностью его выключить, установите axelix.sbs.transaction.monitoring.enabled=false — подробности см. в разделе Мониторинг транзакций.

Откройте эндпоинт метаданных

Страница не опирается на отдельный actuator-эндпоинт. Axelix Spring Boot Starter агрегирует данные о транзакциях на JVM и отправляет их в Master как часть регистрационных метаданных инстанса — того же ответа, который отдаёт эндпоинт axelix-metadata, уже опрашиваемый Master. Пока axelix-metadata открыт (см. Открытие эндпоинтов на Axelix ниже 1.2.0), страница работает без каких-либо дополнительных эндпоинтов.

См. также

На этой странице