跳到主要内容
版本:Latest-3.2

Query Profile 概述

本文介绍如何查看并分析 Query Profile。Query Profile 记录了查询中涉及的所有工作节点的执行信息。您可以通过 Query Profile 快速识别影响 StarRocks 集群查询性能的瓶颈。

启用 Query Profile

您可以通过将变量 enable_profile 设置为 true 以启用 Query Profile:

SET enable_profile = true;

针对慢查询开启 Query Profile

在生产环境中,通常不推荐全面启用 Query Profile 功能。这是因为 Query Profile 的数据采集和处理过程可能会为系统带来额外的负担。然而,如果需要捕捉到耗时的慢查询,就需要巧妙地使用这一功能。为此,您可以选择只对慢查询启用 Query Profile。这可以通过设置变量 big_query_profile_threshold 为一个大于 0s 的时间来实现。例如,若将此变量设置为 30s,意味着只有那些执行时间超过 30 秒的查询会启用 Query Profile 功能。这样既保证了系统性能,又能有效监控到慢查询。

-- 30 seconds
SET global big_query_profile_threshold = '30s';

-- 500 milliseconds
SET global big_query_profile_threshold = '500ms';

-- 60 minutes
SET global big_query_profile_threshold = '60m';

启用 Runtime Query Profile

某些查询可能需要耗费较长时间执行,从数十秒到数小时不等。在查询完成之前,经常无法判断查询是否还在进行或是系统已经死机。为解决这个问题,StarRocks 在 v3.1 及以上版本中引入了 Runtime Query Profile 功能。此功能允许 StarRocks 在查询执行过程中,按固定时间间隔收集并上报 Query Profile 数据。这使您能够实时了解查询的执行进度和潜在的瓶颈点,而不必等到查询完全结束。通过这种方式,您可以更有效地监控和优化查询过程。

当 Query Profile 启用时,该功能会自动启用,默认的上报时间间隔为 10 秒。您可以通过修改变量 runtime_profile_report_interval 来调整对应的时间间隔:

SET runtime_profile_report_interval = 30;

Runtime Query Profile 与普通 Query Profile 格式和内容均相同。您可以像分析常规 Query Profile 一样分析 Runtime Query Profile,以此了解集群内正在运行的查询的性能指标。

配置 Query Profile 行为

配置方式配置项可选值默认值含义
Session 变量enable_profiletrue/falsefalse是否启用 Query Profile 功能。true 表示启用。
Session 变量pipeline_profile_level1/21设置 Query Profile 的级别。1 表示会对 Profile 进行合并展示;2 表示保留原始的 Profile,如果选用这一级别,那么所有可视化的分析工具将不再起作用,因此通常不建议修改该参数。
Session 变量runtime_profile_report_interval正整数10设置 Runtime Query Profile 上报的时间间隔,单位秒。
Session 变量big_query_profile_threshold字符串0s设置长查询自动开启 Query Profile 的阈值,0s 表示关闭该功能。整数结合时间单位表示启用,可以用单位包括:mssm
FE 动态配置项enable_statistics_collect_profiletrue/falsefalse是否启用统计信息采集相关查询的 Query Profile。true 表示启用。

获取 Query Profile

通过 Web 页面获取

以下步骤获取 Query Profile:

  1. 在浏览器中访问 http://<fe_ip>:<fe_http_port>
  2. 在显示的页面上,单击顶部导航中的 queries
  3. Finished Queries 列表中,选择您要分析的查询并单击 Profile 列中的链接。

img

页面将跳转至相应 Query Profile。

img

通过 get_query_profile 函数获取

以下示例展示了如何获取 Query Profile:

-- Enable the profiling feature.
set enable_profile = true;

-- Run a simple query.
select 1;

-- Get the query_id of the query.
select last_query_id();
+--------------------------------------+
| last_query_id() |
+--------------------------------------+
| bd3335ce-8dde-11ee-92e4-3269eb8da7d1 |
+--------------------------------------+

-- Obtain the query profile.
select get_query_profile('502f3c04-8f5c-11ee-a41f-b22a2c00f66b')\G

分析 Query Profile

Query Profile 生成的原始文本内容非常庞大,包含了众多指标。如需详细了解这些指标,请参阅Query Profile 结构与详细指标

然而,对于非开发者的普通用户来说,直接分析这些原始文本可能并非易事。为了解决这一问题,StarRocks 提供了 文本可视化 Query Profile 的分析方式。您可以通过该功能更直观地理解复杂 Query Profile 的含义。