查询计划可视化工具概览

本页面介绍了查询计划可视化工具的关键组件。

Google Cloud 控制台中的查询计划可视化工具可帮助您了解 Spanner 为评估查询而选择的执行计划的结构。

可视化工具以可视化图表的形式显示执行计划,让您更轻松地分析 Spanner 如何执行查询并找出潜在的性能瓶颈。您可以使用查询计划可视化工具执行以下任一操作:

  • 调试慢速查询:查明查询计划的哪个部分耗费的时间或资源最多。
  • 验证优化:比较进行更改(例如添加索引或重写联接)前后的查询计划,以验证改进效果。
  • 了解查询行为:了解 Spanner 如何处理复杂的 SQL 语句,包括联接、聚合和分布式操作。

使用查询计划可视化工具的好处

查询计划可能很复杂。可视化工具提供以下功能,可简化计划分析:

  • 图形表示:显示数据从表和索引通过各种运算符流向最终结果的过程。
  • 性能数据分析:通过视觉提示识别高延迟和高 CPU 消耗的昂贵运算符。
  • 行数可视化:使用线条粗细指示器显示每个步骤的数据量。
  • 详细统计信息:提供每个算子的特定运行时统计信息。

访问查询计划可视化工具

您可以通过以下任一方法在 Google Cloud 控制台中访问查询计划可视化工具:

  • Spanner Studio:在编写和测试查询时生成实时、按需查询计划。
  • Query Insights:查看一段时间内从生产工作负载中捕获的历史采样查询计划。

在 Spanner Studio 中查看按需方案

如需在 Spanner Studio 中按需查看查询的查询计划,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Spanner 实例页面。

    转到“实例”页面

  2. 点击包含您要查询的数据库的实例的名称。

  3. 在数据库列表中,点击数据库的名称。

  4. 在导航菜单中,点击 Spanner Studio。

  5. 在编辑器窗格中,输入 SQL 查询。

  6. 点击运行。

  7. 点击说明标签页。

在 Query Insights 中查看采样计划

如需在 Query Insights 中查看历史采样查询计划,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Spanner 实例页面。

    转到“实例”页面

  2. 点击包含您要调查的数据库的实例的名称。

  3. 在导航菜单中,点击 Query Insights。

  4. 选择要分析的数据库和时间范围。

  5. 在排名前 N 的查询表中,点击要检查的查询或请求标记。

  6. 在查询计划样本图表中,点击代表查询执行的样本点。

  7. 在查询计划可视化工具部分中,查看可视化执行计划。

可视化工具会将查询计划显示为有向无环图 (DAG)。

已注释的查询计划可视化工具

查询计划可视化图表可能很大,具体取决于您执行的查询。如需隐藏或显示详细信息,请点击展开/紧凑视图选择器。如需放大或缩小,请使用缩放控件。

可视化工具界面提供以下信息面板:

如需下载直观呈现的查询计划,请点击下载 JSON。如需稍后查看查询计划,您可以将下载的 JSON 配置文件重新导入 Spanner Studio。如果您需要排查性能问题,请与 Spanner 支持团队分享 JSON 文件。

查询计划无环图

Spanner 用于运行查询的逻辑会显示为 DAG。 该图表会自下而上显示数据流。表和索引显示在底部,最终查询输出显示在顶部。

图中的每个节点都由一张卡片表示。每张卡片代表一个迭代器,该迭代器会使用其输入中的行,并为其父级生成行。

连接卡片的线条表示迭代器之间的行流。 线条粗细表示传递的相对行数。线条越粗,表示行数越多。

图表上的每张卡片都包含以下信息:

  • 迭代器名称:迭代器的名称。
  • 运行时统计信息:返回的行数、延迟时间和 CPU 使用率。

点击卡片可查看有关延迟时间、CPU 使用率、返回的行数、执行次数和机器组数量的更多信息。

如需详细了解运算符,请参阅查询执行运算符。

Spanner 查询通常会从多个数据库分片中检索数据。机器组表示一组连续的查询执行运算符,这些运算符针对一组拆分一起执行。在单个机器组中,运算符会从下到上依序执行,而不同的机器组会并行执行。当数据在跨机器组边界的拆分之间移动时,它会通过远程过程调用 (RPC) 进行传输。

如需详细了解拆分,请参阅数据库拆分。

该可视化工具可帮助您区分逻辑分布和物理分布:

  • 逻辑边界:标有分布式的卡片表示查询计划器拆分查询逻辑的位置。
  • 物理分布:图表上的机器组颜色表示根据运行时统计信息得出的实际物理执行情况。

物理边界通常与逻辑分布式运算符一致,但可能会因拆分在服务器上的放置方式而有所不同。

查询汇总

查询摘要窗格提供以下简要执行指标,并突出显示查询中的潜在瓶颈:

  • 总用时:从开始到结束运行查询所用的总时间。
  • CPU 时间:处理查询的所有线程和服务器消耗的累计 CPU 时间。
  • 计划创建时间:查询编译器和优化器生成执行计划所花费的时间。
  • 服务器队列延迟时间:查询在开始处理之前在服务器队列中等待的时长。
  • 返回的行数:最终查询结果中返回的总行数。
  • 扫描的行数:从所有扫描的表和索引的存储空间中读取的总行数。
  • 远程调用:在拆分或机器组之间进行的 RPC 总数。
  • 查询优化器版本:用于编译计划的 Spanner 查询优化器的版本。
  • 统计信息软件包:用于基于费用的优化的优化器统计信息软件包。

核心操作函数

重要运算符部分突出显示了查询计划中资源密集度最高的迭代器:

  • 延迟时间最长:执行时长最长的操作节点。
  • 最长 CPU 时间:消耗 CPU 时间最长的操作节点。
  • 最大行数:处理或返回最多行数的运算符。

查询执行时间轴

查询执行时间轴标签页会显示一个基于时间的图表,其中显示每个机器组执行其查询部分的时长。机器组可能不会在整个查询期间运行,也可能会运行多次。不过,时间轴仅显示其初始执行的开始时间和最终执行的结束时间。

性能视觉提示

可视化工具使用以下颜色和图标来帮助您发现问题:

  • 红色条:表示该算子消耗的延迟时间或 CPU 时间占查询总时间的百分比。
  • 警告三角形:表示发生了全表扫描。此类扫描通常表明有机会优化查询,例如通过添加二级索引。
  • 机器组颜色:区分机器组并突出显示组之间的转换。这些转换需要跨不同机器远程执行,这会产生序列化和网络开销。查询执行时间轴也会显示这些机器组颜色。

后续步骤