Перейти к основному содержимому

Визуализированный анализ текстового Query Profile

Как получить и проанализировать текстовые Query Profile через MySQL клиент.

Анализ профилей существующих запросов с помощью ANALYZE PROFILE

Для анализа текстового Profile существующего (исторического или выполняющегося) запроса в вашем кластере, сначала необходимо использовать оператор SHOW PROFILELIST для получения сводки запроса. Эта команда перечисляет все запросы, которые успешно завершились, завершились с ошибкой, и те, которые все еще выполняются (более 10 секунд и еще не завершены). С помощью этого оператора вы можете получить соответствующий Query ID для последующего анализа. Синтаксис следующий:

SHOW PROFILELIST [LIMIT <num>];

Примеры:

SHOW PROFILELIST;
SHOW PROFILELIST LIMIT 5;

Вывод:

+--------------------------------------+---------------------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| QueryId | StartTime | Time | State | Statement |
+--------------------------------------+---------------------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| a40456b2-8428-11ee-8d02-6a32f8c68848 | 2023-11-16 10:34:18 | 21ms | Finished | SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES\n WHERE ROUTINE_TYPE="FUNCTION" AND ROUTINE_SCHEMA = "None" |
| a3fc4060-8428-11ee-8d02-6a32f8c68848 | 2023-11-16 10:34:17 | 39ms | Finished | select TABLE_NAME, COLUMN_NAME from information_schema.columns\n where table_schema = 'Non ... |
| a3f7d38d-8428-11ee-8d02-6a32f8c68848 | 2023-11-16 10:34:17 | 15ms | Finished | select connection_id() |
| a3efbd3b-8428-11ee-8d02-6a32f8c68848 | 2023-11-16 10:34:17 | 16ms | Finished | select connection_id() |
| a26ec286-8428-11ee-8d02-6a32f8c68848 | 2023-11-16 10:34:15 | 269ms | Error | EXPLAIN ANALYZE SELECT c_nation, s_nation, year(lo_orderdate) AS year , SUM(lo_revenue) AS revenue FROM lineorder_flat WHERE ... |
+--------------------------------------+---------------------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------+

После получения Query ID вы можете приступить к анализу Query Profile с помощью оператора ANALYZE PROFILE. Синтаксис следующий:

ANALYZE PROFILE FROM '<Query_ID>' [, <Node_ID> [, ...] ]
  • Query_ID: ID, соответствующий запросу, полученный из оператора SHOW PROFILELIST.
  • Node_ID: ID узла Profile. Для узлов, чьи ID указаны, Selena возвращает подробную информацию о метриках для этих узлов. Для узлов, чьи ID не указаны, Selena возвращает только сводную информацию.

Profile включает следующие разделы:

  • Summary: Сводная информация Profile.
    • QueryID
    • Информация о версии
    • Статус запроса, включая Finished, Error и Running.
    • Общее время выполнения запроса.
    • Использование памяти
    • Топ 10 узлов с наибольшим использованием CPU.
    • Топ 10 узлов с наибольшим использованием памяти.
    • Переменные сессии, которые имеют значение, отличное от значения по умолчанию.
  • Fragments: Отображает метрики для каждого узла в каждом Fragment.
    • Время, использование памяти, информация об оценке стоимости и выходные строки для каждого узла.
    • Узлы с процентом использования времени, превышающим 30%, выделяются красным цветом.
    • Узлы с процентом использования времени, превышающим 15% и менее 30%, выделяются розовым цветом.

Пример 1: Запрос Query Profile без указания node ID.

img

Пример 2: Запрос Query Profile с указанием node ID как 0. Selena возвращает все подробные метрики для Node ID 0 и выделяет метрики с высоким использованием для более легкой идентификации проблем.

img

Кроме того, вышеуказанные методы также поддерживают отображение и анализ Runtime Query Profile, то есть Profile, генерируемого для выполняющихся запросов. Когда функция Query Profile включена, вы можете использовать этот метод для получения Profile запросов, которые в настоящее время выполняются более 10 секунд.

По сравнению с завершенными запросами, текстовый Query Profile для выполняющихся запросов содержит следующую информацию:

  • Статус операторов:

    • ⏳: Операторы не запущены. Эти операторы могут не начать выполнение из-за зависимостей.
    • 🚀: Выполняющиеся операторы.
    • ✅: Операторы, которые завершили выполнение.
  • Общий прогресс: Рассчитывается на основе количество операторов, завершивших выполнение / общее количество операторов. Из-за отсутствия подробной информации о строках данных это значение может быть слегка искажено.

  • Прогресс операторов: Рассчитывается на основе количество обработанных строк / общее количество строк. Если общее количество строк не может быть рассчитано, прогресс отображается как ?.

Пример:

img

Симуляция запроса для анализа Profile с помощью EXPLAIN ANALYZE

Selena предоставляет оператор EXPLAIN ANALYZE, позволяющий симулировать и анализировать profile запроса напрямую. Синтаксис следующий:

EXPLAIN ANALYZE <sql_statement>

При выполнении EXPLAIN ANALYZE, Selena по умолчанию включит функцию Query Profile для текущей сессии.

В настоящее время EXPLAIN ANALYZE поддерживает два типа SQL операторов: операторы SELECT и операторы INSERT INTO. Вы можете симулировать и анализировать Query Profile операторов INSERT INTO только для внутренних таблиц в default catalog Selena. Обратите внимание, что при симуляции и анализе Query Profile операторов INSERT INTO фактические данные не будут загружены. По умолчанию транзакция импорта будет прервана, чтобы гарантировать отсутствие непреднамеренных изменений данных во время анализа.

Пример 1: Симуляция и анализ оператора SELECT. Результаты запроса отбрасываются.

img

Пример 2: Симуляция и анализ оператора INSERT INTO. Транзакция загрузки будет прервана.

img

Ограничения

  • Операторы EXPLAIN ANALYZE INSERT INTO поддерживаются только для таблиц в default catalog.
  • Для достижения лучших визуальных эффектов выходной текст содержит ANSI символы для обеспечения цвета, выделения и других функций. Рекомендуется использовать клиент MyCLI. Для клиентов, которые не поддерживают функции ANSI, таких как MySQL клиент, могут возникнуть некоторые незначительные нарушения отображения. Обычно они не влияют на использование. Например:

img