StarRocks Query Profile介绍
Query Profile记录了一条查询在各个执行阶段、各个算子(Operator)上的执行信息,用于对StarRocks查询进行算子级别的性能透视,帮助快速定位查询的性能瓶颈。本文介绍Query Profile的作用、开启方式、查看方式以及主要指标。
功能概述
当StarRocks查询执行较慢或资源消耗较高时,可以通过Query Profile查看查询各阶段的执行详情,包括每个算子的耗时、输出行数、输出字节数等指标,从而识别耗时最高的算子并针对性优化。
Query Profile采用树形结构组织算子的执行信息,并可与SQL审计日志中的QueryId关联,实现从审计日志到执行剖析的端到端追踪。
开启Query Profile
Query Profile默认不开启,通过会话变量enable_profile开启:
1SET enable_profile = true;
开启后,查询结束时会记录完整的执行剖析信息。
查看Query Profile
通过EXPLAIN ANALYZE查看
对于需要直接剖析的SQL,可使用EXPLAIN ANALYZE执行并返回算子级别的Profile。该命令会默认为当前会话开启Query Profile:
1EXPLAIN ANALYZE SELECT status, COUNT(*) cnt FROM orders GROUP BY status ORDER BY cnt DESC;
执行后返回完整的算子级Profile,包含AGGREGATE、SCAN、SORT等算子的OperatorTotalTime(算子耗时)、OutputRows(输出行数)、OutputBytes(输出字节数)等详细指标。返回结果中的QueryId可与审计日志关联,实现端到端追踪,精准定位性能瓶颈。
通过Web UI查看
开启Query Profile后,可在StarRocks的FE Web UI中查看已执行查询的Profile,Web UI保留最近500条查询的Profile,并支持对Profile进行回放查看。
Profile持久化
Query Profile会持久化到FE节点的磁盘日志中,便于后续查看和分析。Profile日志文件位置及保留时长如下:
1/mnt/bmr/starrocks/fe/log/fe.profile.log # 保留1天
Query Profile结构说明
Query Profile采用树形结构组织,自上而下由以下五个层级构成。
表一 Query Profile结构说明
| 层级 | 说明 |
|---|---|
| Fragment | 执行树,一个查询包含一个或多个Fragment。 |
| FragmentInstance | Fragment的实例,一个Fragment可在不同计算节点上运行多个实例。 |
| Pipeline | 由相互连接的Operator构成的执行链,一个FragmentInstance会被拆分为多个Pipeline。 |
| PipelineDriver | Pipeline的实例,用于利用多核并行执行。 |
| Operator | 算子,一个PipelineDriver由多个Operator组成,是性能分析的核心对象。 |
主要指标说明
Query Profile的核心是算子(Operator)级别的执行指标,常用指标如下。
表二 算子主要指标说明
| 指标 | 说明 |
|---|---|
| OperatorTotalTime | 该算子消耗的总时间,是定位瓶颈的主要依据。 |
| OutputRows | 该算子输出的行数。 |
| OutputBytes | 该算子输出的字节数。 |
| PeakMemoryUsage | 该算子的内存使用峰值。 |
不同类型的算子还有各自的专属指标,常见如下:
- SCAN(扫描):
ScanTime、BytesRead、TabletCount及各类索引过滤行数,用于判断扫描数据量是否过大或索引是否生效。 - AGGREGATE(聚合):
GroupingKeys、AggregateFunctions、HashTableSize,用于分析聚合计算开销。 - JOIN(关联):
JoinType、BuildHashTableTime、SearchHashTableTime,用于评估Join方式和顺序是否合理。 - SORT(排序):
SortKeys、SortingTime、MergingTime,用于分析排序开销。
性能分析建议
- 查询执行时间主要由耗时最高的算子决定,分析时优先关注
OperatorTotalTime较大的算子。 - 若SCAN算子耗时高,结合
ScanTime、BytesRead及过滤行数判断是否扫描数据量过大或索引未生效。 - 若JOIN算子耗时高,关注
BuildHashTableTime、SearchHashTableTime及右表数据量,评估Join顺序和分布方式。 - 通过Profile返回的QueryId关联审计日志中的同一QueryId,可实现从SQL记录到执行剖析的端到端追踪。
注意事项
- Query Profile默认不开启,需通过
enable_profile开启后才会记录。 - Web UI仅保留最近500条查询的Profile,历史Profile可通过持久化的日志文件查看。
- Profile日志文件
fe.profile.log默认保留1天,如需长期保存请及时归档。
评价此篇文章
