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

Explain Analyze

Этот документ объясняет, как получить и проанализировать текстовые Query Profile в Selena. Это поможет вам понять производительность запросов и найти способы оптимизации ваших SQL-запросов.

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

Чтобы проанализировать текстовый Profile существующего (исторического или выполняющегося) запроса в вашем cluster, сначала необходимо использовать оператор 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 без указания ID узла.

img

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

img

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

По сравнению с Profile завершенных запросов, текстовый 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 только для внутренних таблиц в каталоге по умолчанию Selena. Обратите внимание, что при симуляции и анализе Query Profile операторов INSERT INTO фактические данные не будут загружены. По умолчанию транзакция импорта будет отменена, чтобы гарантировать, что во время анализа не будут внесены непреднамеренные изменения в данные.

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

img

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

img

Ограничения

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

img