Explain Analyze

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

Анализ профилей существующих запросов с помощью 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: идентификатор запроса, полученный из SHOW PROFILELIST.

  • Node_ID: идентификатор узла профиля. Для указанных узлов StarRocks вернёт детальные метрики; для неуказанных — только сводку.

Профиль включает разделы:

  • Summary: сводная информация профиля.

    • QueryID

    • Информация о версии

    • Статус запроса: Finished, Error, Running

    • Общее время запроса

    • Память

    • Top‑10 узлов по CPU

    • Top‑10 узлов по памяти

    • Переменные сессии, отличающиеся от значений по умолчанию

  • Fragments: метрики по каждому узлу в каждом Fragment

    • Время, память, оценки стоимости, число выходных строк для узлов

    • Узлы с долей времени > 30% подсвечиваются красным

    • Узлы с долей времени 15–30% подсвечиваются розовым

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

img

Пример 2: запрос профиля с указанием node ID = 0. StarRocks вернёт все детальные метрики для узла 0 и подсветит метрики с высокой нагрузкой для упрощения поиска проблем.

img

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

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

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

    • ⏳: операторы не стартовали. Это может быть из‑за зависимостей.

    • 🚀: операторы выполняются.

    • ✅: операторы завершены.

  • Общий прогресс: вычисляется как количество завершённых операторов / общее количество операторов. Из‑за отсутствия точных данных по строкам может быть не совсем точным.

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

Пример:

img

Симуляция запроса для анализа профиля через EXPLAIN ANALYZE

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

EXPLAIN ANALYZE <sql_statement>

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

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

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

img

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

img

Ограничения

  • EXPLAIN ANALYZE INSERT INTO поддерживается только для таблиц в default‑каталоге.

  • Для лучшего визуального восприятия вывод содержит ANSI‑символы (цвет, подсветка и др.). Рекомендуется использовать клиент MyCLI. В клиентах без поддержки ANSI (например, MySQL client) возможны мелкие артефакты отображения, обычно не влияющие на использование. Пример:

img