欢迎参与 8 月 1 日中午 11 点的线上分享,了解 GreptimeDB 联合处理指标和日志的最新方案! 👉🏻 点击加入

Skip to content
On this page
技术
2025-4-22

一键看懂 SQL 执行过程:Dashboard 可视化 EXPLAIN 上线

GreptimeDB Dashboard 上线了全新的 EXPLAIN ANALYZE 可视化功能,帮助用户快速看懂、轻松分析执行计划的图形化结果。

调试数据库慢查询时,我们最常用的工具之一就是 EXPLAIN ANALYZE。它可以告诉你查询是怎么一步步执行的,每一步用了多长时间,处理了多少数据

不过问题也来了:这些信息虽然有用,但并不一定好懂。

于是,我们在 GreptimeDB Dashboard 上线了全新的 EXPLAIN ANALYZE 可视化功能,希望用户可以一眼看懂、轻松分析执行计划的图形化结果。

为什么 EXPLAIN ANALYZE 很重要

当你遇到查询变慢的时候,EXPLAIN ANALYZE 是最直接、也最有用的工具之一。

它会告诉你:

  • 数据库怎么执行这条 SQL(计划);
  • 实际执行过程中每一步用了多长时间(真实耗时);
  • 每个步骤的输出数据量、内存使用、I/O 等等。

在 PostgreSQL 社区,很多优秀的工具都是基于 EXPLAIN 打造的,比如:

这些工具给了我们很多灵感,促进了 GreptimeDB Dashboard 里 EXPLAIN 可视化功能的诞生。

GreptimeDB 中的 EXPLAIN ANALYZE

在 GreptimeDB 中,执行计划的传统输出格式和 PostgreSQL 很像,是一棵“缩进树”:

sql
SortPreservingMergeExec: [ts@0 DESC] metrics=[]
  WindowedSortExec: expr=ts@0 DESC num_ranges=1 fetch=100 metrics=[output_rows: 8, elapsed_compute: 1]
    PartSortExec: expr=ts@0 DESC num_ranges=1 limit=100 metrics=[output_rows: 16, elapsed_compute: 2530502, row_replacements: 8]
      UnorderedScan: region=4402341478400(1025, 0)... metrics=[output_rows: 8, mem_used: 1152, elapsed_await: 18584876, elapsed_poll: 19227585]

每一行表示执行计划中的一步操作,缩进表示它是某个步骤的子节点。每个节点有执行器类型(比如 SortPreservingMergeExec),一些参数,还有执行过程中统计的数据(如耗时、输出行数和内存使用情况等)。这种格式对于能够熟练使用的用户来说很高效,但当计划增加和深入,或想在不同节点之间对比耗时时,手动分析就有点费劲了

因此 GreptimeDB 新增了对 EXPLAIN ANALYZE FORMAT JSON 的支持,并基于结构化的结果做了一整套图形化、可视化的方案

一键可视化:Dashboard 帮你读懂 EXPLAIN ANALYZE

现在用户只需要在 Dashboard 里写好查询,点击 Explain Query #1,等待查询执行完就能看到一个清晰可视化的执行计划。不需要用户再靠眼力分析 JSON,Dashboard 会直接画出来,能够极大地节省用户的时间和精力。

目前我们提供三种视图:

📊 表格视图(Table View)

这个视图会把整个执行计划拆成两个阶段(Stage),每个阶段以树的形式展开。 每个节点都会显示关键指标,比如:

  • 执行耗时(elapsed_compute);
  • 输出行数(output_rows);
  • 其他和 GreptimeDB 引擎有关的指标。

我们用不同颜色的横向指示条表示耗时对比,这样用户一眼就能看出“最耗资源”的那一步,还可以进一步展开来查看全部指标:

(图 1:表格视图示例)
(图 1:表格视图示例)

🕸️ 图形视图(Chart View)

图形视图会把执行计划画成树,结构层级一目了然。同时支持左右切换查看不同的节点。

下面展示了一个包含 11 个节点的查询示例:

(图 2:图形视图示例)
(图 2:图形视图示例)

🧾 原始 JSON 视图(Raw JSON View)

如果你更喜欢直接查看数据,可以切换到原始的 JSON 视图,也可以下载后进行分析或分享:

(图 3:原始 JSON 视图示例)
(图 3:原始 JSON 视图示例)

🔄 支持导入已有的 JSON 结果

如果你手上已经有一份 EXPLAIN ANALYZE FORMAT JSON 的结果,也可以直接导入到 Dashboard 内查看。

只要使用 Import Result JSON 功能,就能马上切换到 GreptimeDB 提供的三种视图进行分析。这对于调试线上慢查询、协作分析非常方便

(图 4:导入已有的 JSON 数据)
(图 4:导入已有的 JSON 数据)

最后总结一下

这项可视化功能,是我们在支持 EXPLAIN ANALYZE 基础上的进一步增强。它让查询执行计划更直观、更易读,也更适合用户进行协作调试和性能分析。

功能现已上线 Dashboard,欢迎体验!

更多 PR 相关:👉 dashboard#506


关于 Greptime

Greptime 格睿科技专注于打造新一代可观测数据库,服务开发者与企业用户,覆盖从从边缘设备到云端企业级部署的多样化需求。

  • GreptimeDB 开源版:开源、云原生,统一处理指标、日志和追踪数据,适合中小规模 IoT,个人项目与可观测性场景;
  • GreptimeDB 企业版:面向关键业务,提供更高性能、高安全性、高可用性和智能化运维服务;
  • GreptimeCloud 云服务:全托管云服务,零运维体验“企业级”可观测数据库,弹性扩展,按需付费。

欢迎加入开源社区参与贡献与交流!推荐从带有 good first issue 标签的任务入手,一起共建可观测未来。

Star us on GitHub | 📚 官网 | 📖 文档

🌍 Twitter | 💬 Slack | 💼 LinkedIn

加入我们的社区

获取 Greptime 最新更新,并与其他用户讨论。