怎样可以实时看到SQL执行的进度

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】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. 查看 FEBE 日志 (适用于排查问题)

对于长时间运行的查询,你可以通过查看 StarRocks 集群的日志来间接了解进度,但这通常用于排查问题,而不是日常监控。

  • FE 日志 (fe.log):记录了查询的接收、规划和调度信息。
  • BE 日志 (be.INFO):记录了数据扫描、计算和聚合的详细执行过程。

3. 使用 Web UI 监控 (最直观的方法)

StarRocks 提供了 Web 界面来监控集群状态和正在运行的查询。

3.1 FE Web UI

访问任一 FE 节点的 Web 界面(默认端口通常是 8030),然后导航到:

  • Queries 页面:可以看到当前正在运行的查询列表。
  • 对于长时间运行的查询,你可以看到其 Query IDState

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 监控面板。