分析查询性能

本页面介绍了如何使用查询数据分析信息中心检测和分析性能问题。

Query Insights 概览

查询数据分析可帮助您检测和诊断查询和 DML 语句 Spanner 数据库的性能问题。它支持直观的 并提供诊断信息,帮助您 以确定性能问题的根本原因。

Query Insights 帮助您提高 Spanner 查询性能 来逐步完成相应操作:

  1. 确认低效查询是否会导致高 CPU 利用率。
  2. 确定可能存在问题的查询或标记。
  3. 分析查询或请求标记以确定问题。

Query Insights 同时在单区域和多区域中提供 配置。

价格

Query Insights 不会产生额外费用。

数据保留

Query Insights 的数据保留期限最长为 30 天。 对于 CPU 利用率总计(每个查询或请求标记)图表,数据如下: 取自 SPANNER_SYS.QUERY_STATS_TOP_* 个表,每个表最多只能包含 保留 30 天请参阅数据保留 了解详情。

所需的角色

您需要不同的 IAM 角色和权限,具体取决于 您是 IAM 用户或精细访问权限控制用户。

Identity and Access Management (IAM) 用户

如需获取查看 Query Insights 页面所需的权限, 请让管理员向您授予 实例上的以下 IAM 角色:

如需查看“查询数据分析”页面,Cloud Spanner Database Reader (roles/spanner.databaseReader) 角色需要具备以下权限:

  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.select
  • spanner.sessions.create

精细的访问权限控制用户

如果您是精细访问权限控制用户,请确保:

  • 拥有 Cloud Spanner Viewer(roles/spanner.viewer)
  • 拥有精细的访问权限控制权限,并且被授予 spanner_sys_reader 系统角色或某个成员角色。
  • 选择 spanner_sys_reader 或成员角色作为您当前的系统角色 查看数据库概览页面上的说明

如需了解详情,请参阅精细访问权限控制简介精细的访问权限控制系统角色

Query Insights 信息中心

Query Insights 信息中心显示查询负载基于 数据库和时间范围的数据。查询负载是 所选时间范围内该实例中所有查询的 CPU 利用率。 信息中心提供了一系列过滤条件,可帮助您查看查询负载。

如需查看数据库的 Query Insights 信息中心,请执行以下操作:

  1. 在左侧导航面板中选择查询数据分析。通过 查询数据分析信息中心即会打开。
  2. 数据库列表中选择一个数据库。信息中心 显示数据库的查询加载信息。

信息中心包含以下部分:

  1. Databases list:过滤针对特定数据库或全部数据库的查询负载 数据库。
  2. 时间范围过滤条件:按时间范围(例如小时数、 天或自定义范围。
  3. 总 CPU 利用率(所有查询)图表:显示汇总负载 。
  4. 总 CPU 利用率(每个查询或请求标记)图表:显示 CPU 利用率 每个查询或请求标记的利用率。
  5. “前 N 个”查询和标记表:显示热门查询和请求的列表 按 CPU 利用率排序的标记。请参阅 找出可能存在问题的查询或标记

Query Insights 信息中心

信息中心性能

使用查询参数标记查询 以优化 Query Insights 性能。如果没有参数化 或标记查询,则系统可能会返回过多的结果, TopN 查询和标记表无法正常加载。

确认低效查询是否会导致高 CPU 利用率

总 CPU 利用率是对 CPU 利用率(以 CPU 秒为单位)的 您所选数据库中已执行的查询随时间的变化情况。

所有查询的总 CPU 利用率

请查看图表以探索以下问题:

  • 哪个数据库遇到了负载?选择不同的数据库 数据库列表来查找负载最高的数据库。 要找出负载最高的数据库,您还可以查看 中数据库的 CPU 利用率 - 总计图表 Google Cloud 控制台

    数据库负载

  • CPU 利用率是否较高?图表是否随着时间推移或上升?如果 CPU 利用率较高 您的查询则不是出问题了

  • CPU 利用率处于高状态的时间有多长?近期是否有激增,或 是否一直保持高位?使用范围选择器选择不同的时间段,以了解问题持续了多长时间。放大即可查看 观察到查询负载峰值的时间段。缩小以查看长达一周的时间轴。

如果您在图表中看到与整体实例对应的峰值或海拔高度 CPU 使用率,则很可能是由于一个或多个查询开销很大。接下来, 您可以深入了解 找出可能存在问题的查询或请求标签

找出可能存在问题的查询或请求标记

如需找出可能存在问题的查询或请求标记,请查看“排名前 N 的查询”部分:

排名前 N 的查询

在这里,我们看到使用 FPRINT 6815864236081503267 的查询 CPU 利用率较高,可能会出现问题。

前 N 个查询表提供了使用 所选时间范围内的 CPU 使用率最高(从高到低排序)。数值 的 TopN 查询限于 100 个。

对于图表,我们从“TopN”查询统计信息表中提取数据,该表中包含三种不同的 粒度:1 分钟、10 分钟和 1 小时。 图表中每个数据点的值代表的是平均值 刷新一次

根据建议的最佳做法,您可以向 SQL 查询添加标记。 查询标记可帮助您找出更高级别的问题,例如使用 业务逻辑或微服务

排名前 N 的查询表

下表显示了以下属性:

  • FPRINT:请求标记的哈希值(如果存在);否则, 查询。
  • 查询或请求标记:如果查询具有相关联的标记, 已显示请求标记。具有相同标记的多个查询的统计信息 字符串被划分到一行中,并且 REQUEST_TAG 值与 代码字符串。如需详细了解如何使用请求标记,请参阅 使用请求代码和交易代码进行问题排查

    如果查询没有关联的标记,则 SQL 查询会被截断为 大约 64KB对于批量 DML,SQL 语句扁平化 一行,并使用分号分隔符串联起来。连续 相同的 SQL 文本在截断之前会删除重复信息。

  • 查询类型:指示查询是 PARTITIONED_QUERY 还是 QUERYPARTITIONED_QUERY 是具有 partitionToken 的从 PartitionQuery API。 所有其他查询和 DML 语句均由 QUERY 查询类型表示。

  • CPU 利用率:查询的 CPU 资源使用量,以占 过去 10 天内在数据库中运行的所有查询 以介于 0 到 100 之间的水平条上显示。

  • CPU (%):查询的 CPU 资源消耗,以占 在该区域内的数据库上运行的所有查询 。

  • 执行计数:Spanner 在运行期间看到查询的次数 间隔时间。

  • 平均延迟时间(毫秒):每个查询的平均时间长度(以微秒为单位) 在数据库内执行的该平均值不包括编码和 结果集的传输时间以及开销。

  • 扫描的平均行数:查询扫描的平均行数,不包括 已删除值。

  • 返回的平均行数:查询返回的平均行数。

  • 返回的字节数:查询返回的数据字节数(不包括 传输编码开销

图表之间可能存在差异

您可能会注意到,总 CPU 利用率(所有查询) 图表和 CPU 利用率(每个查询或请求标记)图表。那里 以下两点可能会导致这种情况:

  • 不同的数据源:Cloud Monitoring 数据,用于为 总 CPU 利用率(所有查询)图表通常更准确,因为 每分钟推送一次,保留期限为 45 天另一个 这是指系统表数据,这些数据将源于总 CPU 利用率(每次查询) 或“请求代码”等)图表中的数据,可能会计算 10 分钟(或 1 小时)内的平均值 我们可能会丢失在“总 CPU 利用率”中看到的高粒度数据。 (所有查询)图表。

  • 不同的汇总期:两个图的汇总方式不同 窗口。例如,如果检查发生时间超过 6 小时的事件, 查询 SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE 表。在此例中, 将在 10 分钟内汇总 10:01 发生的事件, 出现在与 10:10 时间戳对应的系统表中。

以下屏幕截图显示了此类方差的一个示例。

图表之间的差异

分析特定查询或请求标记

要确定某个查询或请求标记是否是问题的根本原因,请点击 负载最高或 用时要长得多您可以选择多个查询 每次请求代码。

您可以按住图表上的鼠标指针,以便在整个时间轴上进行查询, 了解其 CPU 利用率(以秒为单位)。

通过查看以下内容来缩小问题范围:

  • 负载高的时间有多长?只是现在高吗?还是长时间位于高负载?更改时间范围即可找到 开始表现不佳。
  • CPU 利用率是否出现了峰值?您可以将时间范围更改为 了解查询的历史 CPU 利用率。
  • 资源消耗量如何?它与其他搜索查询有什么关系? 查看表格,并将其他查询的数据与所选查询的数据进行比较。 有很大的区别吗?

要确认所选查询是导致 CPU 利用率较高的原因, 您可以深入了解特定查询形状(或请求标记)的详细信息 并在“查询详细信息”页面上进一步分析。

查看“查询详细信息”页面

若要以图形方式查看特定查询形状或请求标记的详细信息,请执行以下操作: 点击与查询或请求标记关联的 FPRINT。 系统会打开“查询详细信息”页面。

查询详情页面

“查询详细信息”页面会显示以下信息:

  1. 查询详细信息文本:SQL 查询文本,截断至大约 64KB。 具有相同代码字符串的多个查询的统计信息将划分到 一行,其中 REQUEST_TAG 与该代码字符串相匹配。仅 其中一个查询会显示在此字段中对于批处理 DML, 语句会展平为一行,并使用分号串联 分隔符。之前,连续的相同 SQL 文本会进行去重 截断。
  2. 以下字段的值: <ph type="x-smartling-placeholder">
      </ph>
    • 执行计数:Spanner 看到查询的次数 。
    • 平均CPU(毫秒):平均 CPU 资源消耗量,以毫秒为单位, 按时间间隔查询实例的 CPU 资源。
    • 平均延迟时间(毫秒):每个会话的平均时长(以毫秒为单位) 在数据库中执行查询。该平均值不包括编码 结果集的传输时间和开销。
    • 平均返回的行数:查询返回的平均行数。
    • 平均扫描的行数:查询扫描的平均行数。 排除已删除的值。
    • 平均个字节:查询返回的数据字节数(不包括 传输编码开销
  3. 查询计划样本图表:图表上的每个点都代表一个样本 特定时间的查询计划及其特定查询延迟时间。点击其中一个 图表中的点,以查看查询计划并直观呈现所采取的步骤 在查询执行过程中发生的所有变化 注意:查询计划不支持 通过 PartitionQuery API 获取的增加令牌,以及 分区 DML 查询。
  4. 查询计划可视化工具:显示所选的抽样查询计划。每个节点 或卡片上,则代表一个迭代器, 输入并生成行到其父项。点击每个迭代器即可 展开的信息。
  5. 查询延迟时间图表:显示所选查询延迟时间的值 特定时间段内的查询该图还会显示平均延迟时间。
  6. CPU 利用率图表:显示查询的 CPU 利用率。 (以百分比表示)的变化情况它还显示平均 CPU 利用率。
  7. 执行计数/失败图表:显示 以及查询执行失败的次数。
  8. 扫描的行数图表:显示 一段时间内扫描的查询的数量。
  9. 返回的行数图表:显示 一段时间内返回的查询。
  10. 时间范围过滤条件:按时间范围(例如小时、 天或自定义范围。

对于图表,我们从“TopN”查询统计信息表中抓取数据, 具有三种不同的粒度:1 分钟、10 分钟和 1 小时。每个 图表中的数据点代表 1 秒时间间隔内的平均值 分钟。