查看分析 Query Profile
本文介绍如何查看并分析 Query Profile。Query Profile 记录了查询中涉及的所有工作节点的执行信息。您可以通过 Query Profile 快速识别影响 StarRocks 集群查询性能的瓶颈。
启用 Query Profile
针对 StarRocks v2.5 之前的版本,您可以通过将变量 is_report_success
设置为 true
以启用 Query Profile:
set is_report_success = true;
针对 StarRocks v2.5 或更高版本,您可以通过将变量 enable_profile
设置为 true
以启用 Query Profile:
set enable_profile = true;
获取 Query Profile
请按照以下步骤获取 Query Profile:
- 在浏览器中访问
http://<fe_ip>:<fe_http_port>
。 - 在显示的页面上,单击顶部导航中的 queries。
- 在 Finished Queries 列表中,选择您要分析的查询并单击 Profile 列中的链接。
页面将跳转至相应 Query Profile。
分析 Query Profile
Query Profile 结构
以下是示例 Query Profile:
Query:
Summary:
Planner:
Execution Profile 7de16a85-761c-11ed-917d-00163e14d435:
Fragment 0:
Pipeline (id=2):
EXCHANGE_SINK (plan_node_id=18):
LOCAL_MERGE_SOURCE (plan_node_id=17):
Pipeline (id=1):
LOCAL_SORT_SINK (plan_node_id=17):
AGGREGATE_BLOCKING_SOURCE (plan_node_id=16):
Pipeline (id=0):
AGGREGATE_BLOCKING_SINK (plan_node_id=16):
EXCHANGE_SOURCE (plan_node_id=15):
Fragment 1:
...
Fragment 2:
...
Query Profile 由以下三部分组成:
- Fragment:执行树。一个查询由一个或多个 Fragment 组成。
- Pipeline:执行链。执行链没有分支。一个 Fragment 可分为多个 Pipeline。
- Operator:算子。一个 Pipeline 由多个 Operator 组成。
重要指标
Query Profile 包含大量查询执行详细信息的指标。在大多数情况下,您只需关注运算符的执行时间以及处理的数据量大小即可。找到瓶颈后,您就可以有针对性地解决它们。
Summary 指标
指标 | 说明 |
---|---|
Total | 查询消耗的总时间,包括 Planning、Executing 以及 Profiling 阶段耗时。 |
QueryCpuCost | 查询累积 CPU 使用时间。所有并发进程累加,因此该指标会大于实际的执行时间。 |
QueryMemCost | 查询的总内存消耗。 |
Operator 通用指标
指标 | 说明 |
---|---|
OperatorTotalTime | Operator 消耗的总时间。 |
PushRowNum | Operator 累积输入行数。 |
PullRowNum | Operator 累积输出行数。 |
Unique 指标
指标 | 说明 |
---|---|
IOTaskExecTime | 所有 I/O Task 的累计执行时间。 |
IOTaskWaitTime | 所有 I/O Task 的累计等待时间。 |
MorselsCount | I/O Task 的总数。 |
Scan operator
指标 | 说明 |
---|---|
Table | 表名称。 |
ScanTime | Scan 累计时间。Scan 操作在异步 I/O 线程池中完成。 |
TabletCount | Tablet 数量。 |
PushdownPredicates | 下推的谓词数量。 |
BytesRead | 读取数据的大小。 |
CompressedBytesRead | 读取压缩数据的大小。 |
IOTime | 累计 I/O 时间。 |
BitmapIndexFilterRows | Bitmap 索引过滤的数据行数。 |
BloomFilterFilterRows | Bloomfilter 过滤的数据行数。 |
SegmentRuntimeZoneMapFilterRows | Runtime Zone Map 过滤的数据行数。 |
SegmentZoneMapFilterRows | Zone Map 过滤的数据行数。 |
ShortKeyFilterRows | Short Key 过滤的数据行数。 |
ZoneMapIndexFilterRows | Zone Map 索引过滤的数据行数。 |
Exchange operator
指标 | 说明 |
---|---|
PartType | 数据分布模式,包括:UNPARTITIONED 、RANDOM 、HASH_PARTITIONED 以及 BUCKET_SHUFFLE_HASH_PARTITIONED 。 |
BytesSent | 发送的数据大小。 |
OverallThroughput | 吞吐速率。 |
NetworkTime | 数据包传输时间(不包括接收后处理时间)。请参阅下方 FAQ,了解有关指标计算以及潜在异常的更多信息。 |
WaitTime | 由于发送端队列满而导致的等待时间。 |
Aggregate operator
指标 | 说明 |
---|---|
GroupingKeys | GROUP BY 列。 |
AggregateFunctions | 聚合函数。 |
AggComputeTime | 聚合函数计算耗时。 |
ExprComputeTime | 表达式计算耗时。 |
HashTableSize | Hash Table 大小。 |
Join operator
指标 | 说明 |
---|---|
JoinPredicates | Join 谓词。 |
JoinType | Join 类型。 |
BuildBuckets | Hash Table 的 Bucket 数量。 |
BuildHashTableTime | 构建 Hash Table 耗时。 |
ProbeConjunctEvaluateTime | Probe Conjunct 耗时。 |
SearchHashTableTimer | 查询 Hash Table 耗时。 |
Window Function operator
指标 | 说明 |
---|---|
ComputeTime | 窗口函数计算耗时。 |
PartitionKeys | 分区列。 |
AggregateFunctions | 聚合函数。 |
Sort operator
指标 | 说明 |
---|---|
SortKeys | 排序键。 |
SortType | 查询结果排序方式:全排序或者排序 Top N 个结果。 |
TableFunction operator
指标 | 说明 |
---|---|
TableFunctionExecTime | Table Function 计算耗时。 |
TableFunctionExecCount | Table Function 执行次数。 |
Project operator
指标 | 说明 |
---|---|
ExprComputeTime | 表达式计算耗时。 |
CommonSubExprComputeTime | 公共子表达式计算耗时。 |
LocalExchange operator
指标 | 说明 |
---|---|
Type | Local Exchange 类型,包括:Passthrough 、Partition以及 Broadcast`。 |
ShuffleNum | Shuffle 数量。该指标仅当 Type 为 Partition 时有效。 |
Hive Connector
指标 | 说明 |
---|---|
ScanRanges | 扫描的数据分片总数。 |
ReaderInit | Reader 初始化时间。 |
ColumnReadTime | Reader 读取和解析数据时间。 |
ExprFilterTime | 表达式过滤时间。 |
RowsRead | 读取的数据行数。 |