Обзор Query Profile¶
Введение¶
Query Profile фиксирует информацию о выполнении на всех рабочих узлах, участвующих в запросе, помогая быстро находить узкие места, влияющие на производительность. Это мощный инструмент для диагностики и тюнинга производительности запросов в StarRocks.
Начиная с v3.3.0, StarRocks поддерживает Query Profile для загрузки данных с INSERT INTO FILES() и Broker Load. Подробности по метрикам см. в OlapTableSink Operator.
Как включить Query Profile¶
Включение Query Profile¶
Вы можете включить Query Profile, установив переменную enable_profile в true:
SET enable_profile = true;
SET GLOBAL enable_profile = true;
Query Profile только для «медленных» запросов¶
Не рекомендуется держать Query Profile глобально включённым в продакшене длительное время, так как это создаёт дополнительную нагрузку. Чтобы собирать профили только для «медленных» запросов, задайте big_query_profile_threshold больше 0s. Например, 30s означает, что профили будут собираться только для запросов дольше 30 секунд.
-- 30 секунд
SET global big_query_profile_threshold = '30s';
-- 500 миллисекунд
SET global big_query_profile_threshold = '500ms';
-- 60 минут
SET global big_query_profile_threshold = '60m';
Runtime Query Profile¶
Для долгих запросов бывает сложно понять прогресс или выявить проблемы до завершения. Функция Runtime Query Profile (v3.1+) собирает и публикует данные профиля через фиксированные интервалы во время выполнения, обеспечивая оперативное представление о прогрессе и узких местах.
Когда Query Profile включён, Runtime Query Profile активируется автоматически с интервалом публикации по умолчанию 10 секунд. Изменить интервал можно через runtime_profile_report_interval:
SET runtime_profile_report_interval = 30;
Конфигурации¶
Configuration Item |
Type |
Valid Values |
Default |
Description |
|---|---|---|---|---|
enable_profile |
Session Var |
true/false |
false |
Включает Query Profile |
pipeline_profile_level |
Session Var |
1/2 |
1 |
1: сливать метрики; 2: сохранять исходную структуру (отключает инструменты визуализации) |
runtime_profile_report_interval |
Session Var |
Positive integer |
10 |
Интервал публикации Runtime Query Profile (в секундах) |
big_query_profile_threshold |
Session Var |
String |
0s |
Включать Query Profile для запросов дольше указанной длительности (напр., „30s“, „500ms“, „60m“) |
enable_statistics_collect_profile |
FE Dynamic |
true/false |
false |
Включать Query Profile для запросов, связанных со сбором статистики |
Как получить Query Profile¶
Через Web UI¶
Откройте в браузере
http://<fe_ip>:<fe_http_port>.Нажмите queries в верхней навигации.
В списке Finished Queries выберите нужный запрос и нажмите ссылку в колонке Profile.

Вы перейдёте на детальную страницу выбранного Query Profile.

Через SQL‑функцию (get_query_profile)¶
Примерный сценарий:
last_query_id(): возвращает ID последнего выполненного в вашей сессии запроса. Удобно для быстрого получения профиля последнего запроса.show profilelist;: показывает недавние запросы с их ID и статусом. Используйте, чтобы найтиquery_idдля анализа профиля.get_query_profile('<query_id>'): возвращает подробный профиль выполнения указанного запроса. Используйте для анализа того, как выполнялся запрос и где тратились время/ресурсы.
-- Включить профилирование
SET enable_profile = true;
-- Выполните запрос со сканированием и агрегацией, чтобы получить содержательный профиль
-- (системная таблица гарантирует работоспособность на любом кластере)
SELECT count(*) FROM information_schema.columns;
-- Получить query_id запроса
SELECT last_query_id();
+--------------------------------------+
| last_query_id() |
+--------------------------------------+
| 019b364f-10c4-704c-b79a-af2cc3a77b89 |
+--------------------------------------+
-- Посмотреть список профилей
SHOW PROFILELIST;
-- Получить профиль запроса
SELECT get_query_profile('019b364f-10c4-704c-b79a-af2cc3a77b89')\G
Интерпретация Query Profile¶
Explain Analyze¶
Большинству пользователей сложно анализировать «сырое» текстовое представление. StarRocks предоставляет метод Text-based Query Profile Visualized Analysis для более интуитивного понимания.