使用增强型 AlloyDB Query Insights 提升查询性能

本页介绍了如何使用增强型 Query Insights 帮助您近乎实时地检测和分析主副本集群实例和读取池实例的查询性能问题。如需简要了解增强型 Query Insights,请参阅增强型 Query Insights 概览

如需了解如何使用标准 Query Insights,请参阅使用查询数据分析提升查询性能

您可以使用 Gemini in Databases 协助功能来帮助您监控 AlloyDB 资源并排查问题。如需了解详情,请参阅在 Gemini 的协助下进行监控和问题排查

准备工作

如需访问“Query Insights 分析”信息中心,请在 Google Cloud 项目中启用对 AlloyDB for PostgreSQL 的访问权限

所需的角色

如需使用增强型 Query Insights,您需要有权执行以下操作:

  • 如需访问增强型 Query Insights,您需要有权访问 AlloyDB Query Insights 信息中心。
  • 如需修改增强型 Query Insights 设置,您需要拥有更新 AlloyDB 实例的权限。

如需获得这些权限,请让您的管理员向您授予以下角色之一:

  • 基本查看器 (roles/viewer)
  • Database Insights Viewer (roles/databaseinsights.viewer)

如需详细了解如何授予角色,请参阅管理访问权限

启用增强型 Query Insights

  1. 设置 Gemini in Databases

  2. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  3. 在集群和实例列表中,点击一个实例。

  4. 点击 Query Insights

  5. 选择数据库和用户。

  6. 点击修改设置

  7. 启用增强型 Query Insights

  8. 如果您使用 VPC Service Controls 保护 Google Cloud 项目,请databaseinsights.googleapis.com API 作为受限服务添加到服务边界

  9. 保存更改。此操作将重启实例。

启用增强型 Query Insights 后,您可以修改增强型 Query Insights 设置。

修改增强型 Query Insights 设置

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 点击修改设置,然后选择或取消选择以下任一设置:

    • 启用等待事件分析。等待事件分析可帮助您识别和解决数据库中的性能问题。等待事件是指导致处理与查询相关的操作出现延迟的组件。
    • 存储查询注释。通过查看与您调查的任何查询相关的注释(计入查询长度),可了解查询上下文。无需额外的内存。如果您的注释包含敏感信息,请注意用户访问权限。
    • 存储应用标记。启用此功能后,您可以了解哪些 API 和“模型-视图-控制器”路由正在发出请求,并对这些数据进行分组以对其运行指标。
    • 自定义查询长度。您可以更改查询长度的默认限制,范围为 256 个字节到 100 KB。查询长度越大,需要的内存就越多。更改查询长度需要重启实例。
    • 启用查询计划并配置采样率。查询计划可直观呈现用于完成查询样本的操作。采样率决定着您的数据库中每分钟可以捕获的查询样本数量。采样率越高,需要的内存越多。
    • 启用建议。在集群的“Query Insights”页面上显示索引创建建议。
  6. 保存更改。

检测和诊断查询性能问题

您可以使用增强型 Query Insights 检测和诊断性能问题。增强型 Query Insights 信息中心会显示数据库负载,该指标用于衡量所选数据库中的查询在一段时间内所执行的工作(以 CPU 秒为单位)。每个正在运行的查询都使用或等待资源。数据库负载是在给定时间范围内完成的所有查询所花费的时间(以实际经过的时间为单位)与挂钟时间之比。

查看已执行查询完成的工作量

数据库负载图表用于衡量数据库中所有已执行查询所完成的工作量(以 CPU 秒为单位),按所选维度细分。数据库负载会被划分为您从图表下拉菜单中选择的分布数据。

您可以按以下任一维度细分数据库负载:

  • 查询
  • 等待事件类型
  • 等待事件
  • 数据库
  • 用户

如需查看数据库中已执行查询完成的工作,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 选择要显示数据的总执行时间,例如 1 小时或 6 小时,或自定义时间。

  6. Database Load by execution time(按执行时间划分的“数据库负载”)下拉菜单中,选择要调查的维度。根据您选择的维度,图表会显示所选维度对整体数据库负载的影响。例如,如果您从数据库负载图表下拉菜单中选择 Wait events(等待事件)维度,则数据库负载图表中会显示所选数据库和用户在所选时间范围内发生的所有等待事件的细分数据。

    “数据库负载”图表会显示所有九种等待事件类型以及 PostgreSQL 支持的等待事件的数据。根据等待事件和类型的数量,系统会显示前 10 个导致等待的事件和类型。如果等待事件超过 10 个,系统会显示前 9 个等待事件,其余等待事件会归入其他类别。此方法同样适用于“查询”“数据库”和“用户”等其他维度。

查看导致数据库负载增加的主要因素

借助主要维度(按数据库负载)表,您可以查看数据库负载图表中所选时间范围内和选定维度中对数据库负载影响最大的主要维度。根据您在主要维度(按数据库负载)表中选择的维度,您可以找到所选时间范围内的前几位值。

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 选择要显示数据的总执行时间,例如 1 小时或 6 小时,或自定义时间。

  6. 主要维度(按数据库负载)表中,您可以点击以下任一项:

    维度 说明
    查询 该表格按总执行时间显示热门标准化查询。对于每个查询,列中显示的数据如下所示:
    • 平均执行时间(毫秒)。执行查询的平均时间。
    • 总执行时间(毫秒)。特定查询的总执行时间。
    • 返回的行数。查询平均提取行数。
    • 调用次数。应用调用查询的次数。
    • 按图表维度划分的负载百分比。条状图描绘了图表的维度在特定查询中的分布情况。
    等待事件类型 该表会显示所选时间范围内发生的热门等待事件类型列表。
    • 平均等待时间(毫秒)。查询在特定等待事件类型中花费的平均时间。
    • 总等待时间(毫秒)。查询在特定等待事件类型中花费的总执行时间。
    • 等待事件类型计数。在所选时间范围内发生特定等待事件类型的次数。
    • 按图表维度划分的负载百分比。该条状图描绘了在“数据库负载”图表下拉菜单中选择的图表维度在特定等待事件类型中的分布情况。
    等待事件 该表会显示所选时间范围内发生的热门等待事件列表。
    • 平均等待时间(毫秒)。查询在特定等待事件中花费的平均时间。
    • 总等待时间(毫秒)。查询在特定等待事件中花费的总执行时间。
    • 等待事件计数。在所选时间范围内发生特定等待事件的次数。
    • 按图表维度划分的负载百分比。药丸图表显示了在数据库负载图表下拉菜单中选择的图表维度如何在特定等待事件中分布。
    数据库 该表格会显示在所选时间范围内所有已执行查询中对负载有贡献的主要数据库列表。
    • 在数据库中花费的平均时间(毫秒)。查询在特定数据库中花费的平均时间。
    • 在数据库中花费的总时间(毫秒)。查询在特定数据库中花费的总执行时间。
    • 按图表维度划分的负载百分比。药丸图表显示了在“数据库负载”图表下拉菜单中选择的图表维度在特定数据库中的分布情况。
    用户 此表格会显示所选时间范围内所有已执行查询的热门用户列表。
    • 在用户空间中花费的平均时间(毫秒)。查询在特定用户身上花费的平均时间。
    • 在用户空间中花费的总时间(毫秒)。查询在特定用户中花费的总执行时间。
    • 按图表维度划分的负载百分比。药丸图表显示了在“数据库负载”图表下拉菜单中选择的图表维度如何在特定用户之间分布。

查看查询执行时间

增强型 Query Insights 会在主要维度(按数据库负载)表中显示对数据库负载影响最大的 10 个查询。热门查询是指在所选时间范围内对数据库负载贡献最多的查询。后续查询的百分比是相对于最长执行时间而言的。

如需了解主要维度(按数据库负载)中参数的执行时间如何受所选图表维度(查询、等待事件类型、等待事件、数据库和用户)的不同值影响,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 主要维度(按数据库负载)表中查看按图表维度显示的负载百分比,了解表格中的参数受到数据库负载图表中参数的影响程度。

    例如,如果您在数据库负载图表中选择所有查询,然后点击主要维度(按数据库负载)表中的查询标签页,按查询显示负载百分比将显示在给定时间段内在所选数据库中产生最多数据库负载的查询的列表。

查看有关查询执行时间的详细信息

您可以在更多详情中查看有关查询执行时间的详细信息,包括您在数据库负载图表和表格中选择的维度、每个等待事件的定义,以及封装在其他类别中的数据。

更多详细信息还会显示查询详情屏幕中未显示的复杂信息的详细信息。此信息包括每个等待事件的定义。

如需查看有关查询执行时间的详细信息,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 主要维度(按数据库负载)表中,点击相应查询的更多详细信息

增强型 Query Insights 会显示标准化查询($1、$2 等)来替换字面量常量值。例如:

UPDATE
  "demo_customer"
SET
  "customer_id" = $1::uuid,
  "name" = $2,
  "address" = $3,
  "rating" = $4,
  "balance" = $5,
  "current_city" = $6,
  "current_location" = $7
WHERE
  "demo_customer"."id" = $8

此常量值会被忽略,因此增强型 Query Insights 可以汇总类似查询并移除该常量可能显示的任何个人身份信息 (PII) 信息。

确定规范化查询的数据库负载

如需按查询执行显示一段时间内所选规范化查询在所选数据库中执行的时间和资源使用情况(以 CPU 秒为单位),请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 点击数据库负载图表中的查询。如需计算数据库负载,数据库负载图表会使用每分钟边界处完成的标准化查询所花费的时间与实际经过的时间之比。

数据库负载图表顶部会显示规范化查询的前 10KB 个字符,并移除了聚合和个人身份信息 (PII) 原因的字面量。

为了帮助确定在这些状态中所花时间的分布情况,增强型 Query Insights 会将每个标准化查询负载分配到等待事件和等待事件类型。

您可以使用延迟时间图表来研究查询延迟时间。延迟时间是完成规范化查询所需的时间(实际用时)。并行查询的延迟时间是按实际经过的时间衡量的,即使查询的数据库负载可能更高(由于使用了多个核心来运行查询的一部分)也是如此。

您可以按百分位过滤来查看第 50、第 95 或第 99 百分位,以检测不符合预期执行时间的查询。如需分析规范化查询的历史延迟时间,请更改时间范围。

分析规范化查询

查询计划会为您细化呈现一个查询样本中的不同操作,以便您了解和分析规范化查询。

示例查询计划为与标准化查询相关的查询计划示例提供 EXPLAIN ANALYZE 视图。这些是已执行的查询计划,提供查询计划中每项操作所用的活动时间明细。

如需查看示例查询计划,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 选择要显示数据的总执行时间,例如 1 小时或 6 小时,或自定义时间。

  6. 主要维度(按数据库负载)表中,点击某个查询。

  7. 查询计划示例中,点击图表上的任意一个点可查看相应查询的查询计划。

使用代码监控和排查应用性能问题

增强型查询数据分析提供以应用为中心的监控功能,并简化了使用对象关系映射 (ORM) 构建的应用的性能诊断。查询标记可帮助您查找更高级别的结构(例如使用业务逻辑、微服务或一些其他结构)中的问题。您可以在应用中使用代码,以便执行以下操作:

  • 监控数据库性能。
  • 使用 Sqlcommenter 找出由应用代码导致的性能问题。
  • 分析数据库负载。
  • 查看每个代码的负载。

如需了解如何在 Query Insights 中使用标记,请参阅使用 Query Insights 提升查询性能

排查数据库层的应用问题

增强型 Query Insights 提供上下文相关的端到端跟踪视图,可帮助您了解数据库请求针对特定请求的应用问题。上下文中的端到端应用跟踪有助于您确定有问题的查询的来源,例如按模型、视图、控制器和路由确定。

启用 OpenTelemetry 后,span 信息会与 SQL 注释内的标记信息一起发送到数据库中。从应用到 Cloud Logging 的跟踪记录会与数据库查询计划跟踪记录相关联,以确定问题的来源。

如需查看上下文轨迹,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 在集群和实例列表中,点击一个实例。

  3. 点击 Query Insights

  4. 选择数据库和用户。

  5. 点击主要维度(按数据库负载)表中的任意条目。

  6. Query Insights 详情页面中,点击端到端

您还可以使用 Cloud Trace 查看查询计划中每个步骤的端到端跟踪。如需访问 Cloud Trace,请依次选择 Operations > Trace

常见问题解答

本部分提供了有关增强型 Query Insights 的常见问题解答。

为什么查询字符串会被截断?

默认情况下,增强型 Query Insights 会在查询字符串中显示 10 KB 的数据。您可以将显示大小增加到 100KB。

为什么我的 CPU 负载高于“数据库负载”图表中的核心线数上限?

CPU 负载会同时考虑运行时以及等待 Linux 调度器调度正在运行的服务器进程的时间,因此 CPU 负载可能会超出核心线数上限。

我可以使用标准的 Query Insights 指标吗?

可以。标准查询数据分析会生成可通过 stackdriver 访问的计数器。增强型 Query Insights 目前处于预览版阶段,但您可以结合使用 Cloud Monitoring API 和增强型 Query Insights 来获取这些指标。如需了解详情,请参阅 Google Cloud 指标

查询字符串的长度上限是多少?

对于标准的 Query Insights 插件,查询字符串的长度上限为 4.5 KB 字符。对于增强型 Query Insights,默认字符串长度为 10KB,且长度上限为 100KB。

我可以在跨区域复制中使用增强型 Query Insights 吗?

您无法在包含辅助实例的集群上启用增强型 Query Insights。如果增强型 Query Insights 已启用,那么在集群上创建次要实例之前,您必须先在集群中的所有实例上停用增强型 Query Insights。

后续步骤