本页面介绍了如何使用 AlloyDB 高级 Query Insights 功能近乎实时地检测和分析主实例和读取池实例的查询性能问题。如需大致了解 AlloyDB 高级 Query Insights 功能,请参阅 AlloyDB 高级 Query Insights 功能概览。
如需了解如何使用标准 Query Insights,请参阅使用 Query Insights 提升查询性能。
您可以使用 Gemini Cloud Assist 来帮助您监控 AlloyDB 资源并对其进行问题排查。如需了解详情,请参阅使用 Gemini 协助进行监控和问题排查。
准备工作
如需访问 Query Insights 信息中心,请在 Google Cloud 项目中启用对 AlloyDB for PostgreSQL 的访问。
所需的角色
如需使用 AlloyDB 高级 Query Insights 功能,您需要拥有执行以下操作的权限:
- 如需访问 AlloyDB 高级 Query Insights 功能,您需要拥有访问 AlloyDB Query Insights 信息中心的权限。
- 如需修改 AlloyDB 高级 Query Insights 功能的设置,您需要拥有更新 AlloyDB 实例的权限。
如需获得这些权限,请让管理员为您授予以下角色之一:
- Basic Viewer (
roles/viewer
) - Database Insights Viewer (
roles/databaseinsights.viewer
)
如需详细了解如何授予角色,请参阅管理访问权限。
启用 AlloyDB 高级 Query Insights 功能
如需为 AlloyDB 实例启用高级 Query Insights 配置,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
点击启用或修改设置。
在修改 Query Insights 设置标签页中,选中启用 AlloyDB 高级 Query Insights 功能复选框。
这在默认情况下需要进行以下配置更改:
- 选中等待事件分析和活跃查询分析复选框。
- 将查询长度从 4500B 增加到 100000B。
保存更改。这会重启 AlloyDB for PostgreSQL 实例。
gcloud
gcloud alpha alloydb instances update INSTANCE \
--cluster=CLUSTER \
--project=PROJECT \
--region=REGION \
--observability-config-enabled
替换以下内容:
INSTANCE
:要更新的实例的 ID。CLUSTER
:实例集群的 ID。PROJECT
:集群的项目的 ID。REGION
:集群所在的区域,例如us-central1
。
--observability-config-enabled
标志用于对 AlloyDB 实例启用数据收集和分析,以监控其性能和健康状况。如果您想停用高级 Query Insights,请使用 --no-observability-config-enabled
。
Terraform
如需使用 Terraform 对 AlloyDB 实例启用高级 Query Insights,请在 observability_config
代码块中将 enabled
字段设置为 true
。
示例如下:
observability_config { enabled = true ... }
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
REST v1
此示例会对您的 AlloyDB 实例启用高级 Query Insights。如需查看此调用的完整参数列表,请参阅方法:projects.locations.clusters.instances.patch。如需了解高级 Query Insights 设置,请参阅修改高级 Query Insights 设置。
在使用任何请求数据之前,请先进行以下替换:
CLUSTER_ID
:您创建的集群的 ID。它必须以小写字母开头,可以包含小写字母、数字和连字符。PROJECT_ID
:您要将集群放置在其中的项目的 ID。LOCATION_ID
:集群区域的 ID。INSTANCE_ID
:您要创建的主实例的名称。
如需启用实例配置,请使用以下 PATCH
请求:
PATCH https://alloydb.googleapis.com/v1beta/{instance.name=projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID?updateMask=observabilityConfig.enabled}
updateMask=observabilityConfig.enabled
查询参数用于告知 API 更新 observabilityConfig
代码块中的 enabled
字段。
请求 JSON 正文如下所示:
{
"observabilityConfig": {
"enabled" : true,
}
}
启用高级 Query Insights 后,您可以修改高级 Query Insights 设置。
修改高级功能设置
如需修改 AlloyDB 实例的高级 Query Insights 配置,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
点击修改设置,然后修改以下任一设置:
- 等待事件分析:等待事件分析可帮助您识别和解决数据库中的性能问题。等待事件是会导致查询相关操作处理中出现延迟的组件。
- 活跃查询分析:跟踪正在运行的查询。
- 存储查询注释:通过查看与您调查的任何查询相关联的注释(属于查询长度的一部分),了解查询上下文。无需额外的内存。如果您的注释包含敏感信息,请注意用户访问权限。
- 启用索引顾问:在集群的“Query Insights”页面上显示索引创建建议。
- 在选择运行频率字段中,您可以定义建议的更新频率。
- 存储客户端 IP 地址:启用后可跟踪客户端 IP 地址并分析相应数据。
- 存储应用标记:启用后可了解哪些 API 和“模型-视图-控制器”路由正在发出请求,并对这些数据进行分组以对其运行指标。
- 查询计划采样:查询计划可直观呈现用于完成查询样本的操作。采样率决定您的数据库中每分钟可以捕获的查询样本数量。采样率越高,需要的内存越多。
- 在查询长度字段中,您可以更改查询长度的默认限制(从 256 字节到 100 KB)。查询长度越大,需要的内存就越多。更改查询长度需要重启实例。
保存更改。
gcloud
gcloud alpha alloydb instances update INSTANCE \
--cluster=CLUSTER \
--project=PROJECT \
--region=REGION \
--observability-config-preserve-comments \
--observability-config-track-wait-events \
--observability-config-max-query-string-length=QUERY_LENGTH \
--observability-config-record-application-tags \
--observability-config-query-plans-per-minute=QUERY_PLANS \
--observability-config-track-active-queries
替换以下内容:
INSTANCE
:要更新的实例的 ID。CLUSTER
:实例集群的 ID。PROJECT
:集群的项目的 ID。REGION
:集群所在的区域,例如us-central1
。QUERY_LENGTH
:查询的长度,范围为 1024 到 100000 字节。默认查询长度为 10240 字节。更长的查询长度对于分析查询更有用,但也需要更多内存。更改查询长度需要重启实例。您仍然可以为超出长度上限的查询添加标记。QUERY_PLANS
:每分钟要配置的查询计划数。默认情况下,实例上的所有数据库每分钟最多捕获 20 个已执行的查询计划样本。将此值更改为 1 到 20 之间的数字。如需停用采样,请输入 0。提高采样率或许能为您带来更多数据点,但可能会对性能产生负面影响。
如果需要,请使用以下可选的可观测性标志:
--observability-config-track-active-queries
:启用活跃查询的跟踪。如果您想停用此功能,请使用--no-observability-config-track-active-queries
。--observability-config-record-application-tags
:存储应用标记,以帮助您确定发出请求的 API 和模型视图控制器 (MVC) 路由,并对数据进行分组以对其运行指标。此选项要求您使用一组特定标记对查询进行注释。如果您不想存储应用标记,请使用--no-observability-config-record-application-tags
。--observability-config-preserve-comments
:保留添加到 SQL 代码中的注解,以提供有关代码的信息,而不会影响代码的执行。如果您不想保留注解,请使用--no-observability-config-preserve-comments
。--observability-config-track-wait-events
:启用对每种等待事件类型事件的等待。如果您不想跟踪等待事件,请使用--no-observability-config-track-wait-events
。
Terraform
如需使用 Terraform 对 AlloyDB 实例配置高级 Query Insights,请使用 google_alloydb_instance
资源。
下面给出了一个示例:
observability_config { enabled = ENABLED_VALUE preserve_comments = PRESERVE_COMMENTS_VALUE track_wait_events = TRACK_WAIT_EVENTS_VALUE max_query_string_length = MAX_QUERY_STRING_LENGTH_VALUE record_application_tags = RECORD_APPLICATION_TAGS_VALUE query_plans_per_minute = QUERY_PLANS_PER_MINUTE_VALUE track_active_queries = TRACK_ACTIVE_QUERIES_VALUE }
替换以下内容:
ENABLED_VALUE
:实例的可观测性功能状态。在您根据需要修改设置并指定其他标志时,请将其设置为true
。PRESERVE_COMMENTS_VALUE
:保留查询字符串中的注释。默认值为false
。TRACK_WAIT_EVENTS_VALUE
:在查询执行期间为实例记录等待事件。默认值为true
。MAX_QUERY_STRING_LENGTH_VALUE
:查询字符串长度。默认值为10240
。介于 1024 到 100000 之间的任何整数均有效。RECORD_APPLICATION_TAGS_VALUE
:记录实例的应用标记。默认值为true
。QUERY_PLANS_PER_MINUTE_VALUE
:Insights 每分钟捕获的查询执行计划数量(针对所有查询)。默认值为20
。介于 0 到 20 之间的任何整数均有效。TRACK_ACTIVE_QUERIES_VALUE
:跟踪正在运行的查询。默认值为false
。如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
REST v1
此示例会对 AlloyDB 实例配置高级 Query Insights 设置。如需查看此调用的完整参数列表,请参阅方法:projects.locations.clusters.instances.patch。
如需配置高级 Query Insights 设置,请将 enabled
字段设置为 true
,并根据需要修改其他可选字段。如需查看此调用的完整字段列表,请参阅 ObservabilityInstanceConfig。
在使用任何请求数据之前,请先进行以下替换:
CLUSTER_ID
:您创建的集群的 ID。它必须以小写字母开头,可以包含小写字母、数字和连字符。PROJECT_ID
:您要将集群放置在其中的项目的 ID。LOCATION_ID
:集群区域的 ID。INSTANCE_ID
:您要创建的主实例的名称。
如需修改实例配置,请使用以下 PATCH
请求:
PATCH https://alloydb.googleapis.com/v1beta/{instance.name=projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID?updateMask=observabilityConfig.enabled,observabilityConfig.preserveComments,observabilityConfig.trackWaitEvents,observabilityConfig.maxQueryStringLength,observabilityConfig.recordApplicationTags,observabilityConfig.queryPlansPerMinute,observabilityConfig.trackActiveQueries,observabilityConfig.trackClientAddress}
用于配置所有 Query Insights 字段的请求 JSON 正文如下所示:
{
"observabilityConfig": {
"enabled" : true,
"preserveComments": true,
"trackWaitEvents": true,
"maxQueryStringLength": 5000,
"recordApplicationTags": true,
"queryPlansPerMinute": 20,
"trackActiveQueries": true,
}
}
检测和诊断查询性能问题
您可以使用高级 Query Insights 来检测和诊断性能问题。Query Insights 信息中心会显示数据库负载,用于衡量所选数据库中的已执行查询在一段时间内所执行的工作量(以 CPU 秒为单位)。每个正在运行的查询都在使用或等待资源。数据库负载是在给定时间范围内完成的所有查询所花费的时间与实际用时之比。
查看已执行查询完成的工作量测量值
数据库负载图表用于衡量数据库中所有已执行查询所完成的工作量(以 CPU 秒为单位),按所选维度细分。数据库负载会划分为您从图表下拉菜单中选择的分布数据。
您可以按以下任一维度细分数据库负载:
- 查询
- 等待事件类型
- 等待事件
- 数据库
- 用户
如需查看数据库中已执行查询完成的工作量,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
选择要显示相应数据的总执行时间,例如 1 小时或 6 小时,也可以选择自定义时间。
在数据库负载(按执行时间)下拉菜单中,选择要调查的维度。根据您选择的维度,图表会显示所选维度对整体数据库负载的影响情况。例如,如果您从数据库负载图表下拉菜单中选择等待事件维度,则数据库负载图表中会显示所选数据库和用户在所选时间范围内发生的所有等待事件的细分情况。
数据库负载图表会显示所有 9 种等待事件类型以及 PostgreSQL 中支持的等待事件的数据。系统会根据等待事件的数量和类型,显示影响最大的前 10 个等待事件和类型。如果等待事件超过 10 个,系统会显示前 9 个等待事件,其余等待事件则归入其他类别。此方法也适用于其他维度,例如“查询”“数据库”和“用户”。
查看数据库负载的主要影响因素
借助主要维度(按数据库负载)表格,您可以按照所选时间范围和数据库负载图表中选择的维度查看数据库负载的主要影响因素。根据您在主要维度(按数据库负载)表格中选择的维度,您可以找到所选时间范围内的主要值。
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
选择要显示相应数据的总执行时间,例如 1 小时或 6 小时,也可以选择自定义时间。
在主要维度(按数据库负载)表格中,您可以点击以下任何一项:
维度 说明 查询 该表格会按总执行时间显示主要标准化查询。对于每个查询,列中显示的数据如下所示:
- 平均执行时间(毫秒)。执行查询的平均时间。
- 总执行时间(毫秒)。特定查询的总执行时间。
- 返回的行数。查询平均提取行数。
- 调用次数。应用调用查询的次数。
- 负载百分比(按图表维度)。药丸图表针对特定查询显示图表维度分布情况。
等待事件类型 该表格会列出所选时间范围内发生的主要等待事件类型。
- 平均等待时间(毫秒)。查询在特定等待事件类型中花费的平均时间。
- 总等待时间(毫秒)。查询在特定等待事件类型中花费的总执行时间。
- 等待事件类型计数。在所选时间范围内发生特定等待事件类型的次数。
- 负载百分比(按图表维度)。药丸图表显示在数据库负载图表下拉菜单中选择的图表维度在特定等待事件类型中的分布情况。
等待事件 该表格会列出所选时间范围内发生的主要等待事件。
- 平均等待时间(毫秒)。查询在特定等待事件中花费的平均时间。
- 总等待时间(毫秒)。查询在特定等待事件中花费的总执行时间。
- 等待事件计数。在所选时间范围内发生特定等待事件的次数。
- 负载百分比(按图表维度)。药丸图表显示在数据库负载图表下拉菜单中选择的图表维度在特定等待事件中的分布情况。
数据库 该表格会列出在所选时间范围内所有已执行查询中对负载产生影响的主要数据库。
- 数据库中花费的平均时间(毫秒)。查询在特定数据库中花费的平均时间。
- 数据库中花费的总时间(毫秒)。查询在特定数据库中花费的总执行时间。
- 负载百分比(按图表维度)。药丸图表显示在数据库负载图表下拉菜单中选择的图表维度在特定数据库中的分布情况。
用户 该表格会列出在所选时间范围内所有已执行查询的主要用户。
- 在用户中花费的平均时间(毫秒)。查询在特定用户中花费的平均时间。
- 在用户中花费的总时间(毫秒)。查询在特定用户中花费的总执行时间。
- 负载百分比(按图表维度)。药丸图表显示在数据库负载图表下拉菜单中选择的图表维度在特定用户中的分布情况。
查看查询执行时间
AlloyDB 高级 Query Insights 功能会在主要维度(按数据库负载)表格中显示对数据库负载影响最大的前 10 个主要查询。主要查询是指在所选时间范围内产生最多数据库负载的查询。后续查询是最长执行时间的百分比。
如需了解主要维度(按数据库负载)中某个参数的执行时间如何受到所选图表维度(查询、等待事件类型、等待事件、数据库和用户)不同值的影响,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
在主要维度(按数据库负载)表格中查看负载百分比(按图表维度),了解该表格中的某个参数如何受到数据库负载图表中参数的影响。
例如,当您在数据库负载图表中选择所有查询,然后在主要维度(按数据库负载)表格中点击查询标签页时,负载百分比(按查询)会显示给定时间段内在所选数据库中产生最多数据库负载的查询的列表。
查看有关查询执行时间的详细信息
您可以在更多详细信息中查看有关查询执行时间的详细信息,包括您在数据库负载图表和表格中选择的维度、每个等待事件的定义以及封装在其他类别中的数据。
更多详细信息还会显示查询详细信息屏幕中其他位置未显示的复杂信息详情。此信息包括每个等待事件的定义。
如需查看有关查询执行时间的详细信息,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
在主要维度(按数据库负载)表格中,点击查询对应的更多详细信息。
AlloyDB 高级 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 秒为单位),请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
在数据库负载图表中,点击查询。为了计算数据库负载,数据库负载图表会使用在每分钟边界处完成的标准化查询所花费的时间与实际用时之比。
在数据库负载图表的顶部,系统会显示标准化查询的前 10 KB 字符,其中出于聚合和个人身份信息 (PII) 考虑移除了字面量。
为了帮助确定其中每种状态所花费的时间分布,AlloyDB 高级 Query Insights 功能会将每个标准化查询负载分布到等待事件和等待事件类型中。
您可以使用延迟时间图表来研究查询延迟时间。延迟时间是指完成标准化查询所用的时间(实际用时)。并行查询的延迟时间是按实际用时衡量的,即使查询的数据库负载可能更高(由于使用了多个核心来运行查询的一部分)也是如此。
您可以按百分位过滤,以查看第 50、第 95 或第 99 百分位,从而检测不符合预期执行时间的查询。如需分析标准化查询的历史延迟时间,请更改时间范围。
分析标准化查询
查询计划会提供一个查询示例中不同操作的细分情况,以帮助您了解和分析标准化查询。
示例查询计划为与标准化查询相关的查询计划示例提供 EXPLAIN ANALYZE
视图。这些是已执行的查询计划,提供查询计划中每个操作所用的活动时间细分情况。
如需查看示例查询计划,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
选择要显示相应数据的总执行时间,例如 1 小时或 6 小时,也可以选择自定义时间。
在主要维度(按数据库负载)表格中,点击某个查询。
在查询计划示例中,点击图表上的任意点即可查看相应查询的查询计划。
使用标记监控和排查应用性能问题
高级 Query Insights 提供以应用为中心的监控,并简化使用对象关系映射 (ORM) 构建的应用的性能诊断。查询标记可帮助您查找更高级别的结构(例如使用业务逻辑、微服务或一些其他结构)中的问题。您可以在应用中使用标记来帮助您执行以下操作:
- 监控数据库性能。
- 使用 Sqlcommenter 识别由应用代码导致的性能问题。
- 分析数据库负载。
- 查看每个标记的负载。
如需了解如何在 Query Insights 中使用标记,请参阅使用 Query Insights 提升查询性能。
在数据库层排查应用问题
高级 Query Insights 提供上下文中的端到端跟踪视图,可帮助您了解特定请求在数据库层的应用问题。上下文中的端到端应用跟踪记录可帮助您确定有问题的查询的来源,例如按模型、视图、控制器和路由确定来源。
启用 OpenTelemetry 后,span 信息会与 SQL 注释内的标记信息一起发送到数据库。从应用到 Cloud Logging 的跟踪记录都将与数据库查询计划跟踪记录关联,以确定问题的来源。
如需查看上下文中跟踪记录,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
点击主要维度(按数据库负载)表格中的任意条目。
在 Query Insights 详细信息页面中,点击端到端。
您还可以使用 Cloud Trace 查看查询计划中每个步骤的端到端跟踪。如需访问 Cloud Trace,请选择操作 > Trace。
常见问题解答
本部分提供了有关高级 Query Insights 功能的常见问题解答。
为什么查询字符串会被截断?
默认情况下,高级 Query Insights 会显示查询字符串中的 10 KB 内容。您可以将显示内容增加到 100 KB。
为什么“数据库负载”图表中的 CPU 负载会高于最大核心线?
CPU 负载会同时考虑运行时间以及等待 Linux 调度器调度正在运行的服务器进程的时间,因此 CPU 负载可能会超出最大核心线。
我可以使用标准 Query Insights 指标吗?
可以。标准 Query Insights 会生成可通过 Stackdriver 访问的计数器。您可以使用 Cloud Monitoring API 和 Metrics Explorer 界面获取这些指标。如需了解详情,请参阅Google Cloud 指标。
查询字符串的长度上限是多少?
对于标准 Query Insights 插件,查询字符串的长度上限为 4.5 KB 字符。对于高级 Query Insights,默认字符串长度为 10 KB,长度上限为 100 KB。
我可以在次要集群中使用高级 Query Insights 功能吗?
您无法在具有次要实例的集群中启用高级 Query Insights。在集群中创建次要实例之前,您必须先在集群中的所有实例上停用高级 Query Insights。