为了更快的定位您的问题,请提供以下信息,谢谢
【详述】starrocks 执行 select 语句或其他的语句时,怎样可以实时看到SQL执行的进度
【背景】大数据查询会持续 1 - 30 分钟不等,需要看实时的进度
【业务影响】
【是否存算分离】是
【StarRocks版本】3.3.7
【集群规模】
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【联系方式】
【附件】
在 StarRocks 中,要实时查看 SQL 语句的执行进度,主要有以下几种方法:
1. 使用 EXPLAIN ANALYZE (推荐用于分析)
虽然 EXPLAIN ANALYZE 不是实时查看正在运行的 SQL 进度的工具,但它是查看 SQL 执行后各个阶段耗时和进度的最详细方法。
用法:
EXPLAIN ANALYZE <你的 SELECT 语句>;
效果:
- StarRocks 会实际执行这条 SQL 语句。
- 执行完成后,它会返回一个详细的执行计划,其中包含了每个操作符(如 Scan, Join, Aggregate)的实际执行时间、处理的行数、内存消耗等信息。
- 这对于分析 SQL 语句的性能瓶颈非常有用。
2. 查看 FE 和 BE 日志 (适用于排查问题)
对于长时间运行的查询,你可以通过查看 StarRocks 集群的日志来间接了解进度,但这通常用于排查问题,而不是日常监控。
-
FE 日志 (
fe.log):记录了查询的接收、规划和调度信息。 -
BE 日志 (
be.INFO):记录了数据扫描、计算和聚合的详细执行过程。
3. 使用 Web UI 监控 (最直观的方法)
StarRocks 提供了 Web 界面来监控集群状态和正在运行的查询。
3.1 FE Web UI
访问任一 FE 节点的 Web 界面(默认端口通常是 8030),然后导航到:
- Queries 页面:可以看到当前正在运行的查询列表。
- 对于长时间运行的查询,你可以看到其 Query ID 和 State。
3.2 BE Web UI
访问 BE 节点的 Web 界面(默认端口通常是 8040),可以查看该 BE 节点上正在执行的任务和资源使用情况。
4. 通过 SHOW PROCESSLIST (查看状态)
你可以使用标准的 MySQL 协议命令 SHOW PROCESSLIST 来查看当前连接上正在执行的查询及其状态。
用法:
SHOW PROCESSLIST;
效果:
| 字段 | 描述 |
|---|---|
Id |
连接 ID。 |
User |
执行查询的用户。 |
Host |
客户端 IP。 |
Db |
目标数据库。 |
Command |
当前执行的命令类型(如 Query)。 |
Time |
查询已运行的秒数。 |
State |
当前查询所处的状态(例如 Running, Sending data, Waiting for lock 等)。 |
Info |
正在执行的 SQL 语句。 |
通过观察 Time 字段和 State 字段,你可以大致了解查询是否仍在运行以及运行了多久。
5. 监控系统 (Prometheus + Grafana)
对于生产环境,最佳实践是部署一套完整的监控系统(如 Prometheus 采集 StarRocks 的指标,Grafana 进行可视化)。
StarRocks 暴露了大量的指标,包括:
-
starrocks_be_query_scan_bytes:查询扫描的数据量。 -
starrocks_be_query_active_queries:当前活跃的查询数。
通过监控这些指标,你可以从宏观上了解集群的查询负载和数据处理速度。
总结:
-
日常查看进度和状态:使用
SHOW PROCESSLIST。 -
详细分析性能瓶颈:使用
EXPLAIN ANALYZE。 - 图形化监控:使用 FE Web UI 或 Grafana 监控面板。