本页介绍了如何使用 AlloyDB 的高级查询数据分析功能,针对主实例和读取池实例近乎实时检测和分析查询性能问题。如需简要了解适用于 AlloyDB 的高级查询数据分析功能,请参阅 AlloyDB 高级查询数据分析功能概览。
如需了解如何使用标准查询数据分析,请参阅使用查询数据分析提高查询性能。
您可以使用 Gemini in Databases 协助功能来帮助您监控 AlloyDB 资源并排查问题。如需了解详情,请参阅在 Gemini 的协助下进行监控和问题排查。
准备工作
如需访问查询数据分析信息中心,请在 Google Cloud 项目中启用对 AlloyDB for PostgreSQL 的访问权限。
所需的角色
如需使用 AlloyDB 的高级查询分析功能,您需要具备执行以下操作的权限:
- 如需使用 AlloyDB 的高级查询分析功能,您需要有权访问 AlloyDB 查询分析信息中心。
- 如需修改 AlloyDB 高级查询数据分析功能的设置,您需要拥有更新 AlloyDB 实例的权限。
如需获得这些权限,请让您的管理员向您授予以下角色之一:
- 基本查看器 (
roles/viewer
) - Database Insights Viewer (
roles/databaseinsights.viewer
)
如需详细了解如何授予角色,请参阅管理访问权限。
为 AlloyDB 启用高级查询分析功能
如需为 AlloyDB 实例启用高级查询分析配置,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
点击启用或修改设置。
在修改查询数据分析设置标签页中,选中为 AlloyDB 启用高级查询数据分析功能复选框。
默认情况下,这会导致以下配置更改:
- 启用等待事件分析和活跃查询分析复选框。
- 将查询长度从 4500B 增加到 100000B。
- 将每分钟的最大采样率从 20 个查询计划样本提高到 200 个。
保存更改。这会重启您的 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 实例中的数据,以监控其性能和运行状况。如果您想停用高级查询数据分析,请使用 --no-observability-config-enabled
。
Terraform
如需使用 Terraform 为 AlloyDB 实例启用高级查询数据分析,请在 observability_config
块中将 enabled
字段设置为 true
。
示例如下:
observability_config { enabled = true ... }
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
REST v1
此示例介绍了如何在 AlloyDB 实例上启用高级查询数据分析。如需查看此调用的完整参数列表,请参阅方法: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 实例的高级查询分析配置,请按以下步骤操作:
控制台
在 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 到 100,000 字节之间。默认查询长度为 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 实例上配置高级查询数据分析,请使用 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 实例上配置高级查询数据分析设置。如需查看此调用的完整参数列表,请参阅方法:projects.locations.clusters.instances.patch。
如需配置高级查询分析设置,请将 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}
用于配置所有高级查询数据分析字段的请求 JSON 正文如下所示:
{
"observabilityConfig": {
"enabled" : true,
"preserveComments": true,
"trackWaitEvents": true,
"maxQueryStringLength": 5000,
"recordApplicationTags": true,
"queryPlansPerMinute": 100,
"trackActiveQueries": true,
}
}
检测和诊断查询性能问题
您可以使用高级查询数据分析来检测和诊断性能问题。查询数据分析信息中心会显示数据库负载,该指标用于衡量所选数据库中的查询在一段时间内所执行的工作(以 CPU 秒为单位)。每个正在运行的查询都使用或等待资源。数据库负载是在给定时间范围内完成的所有查询所花费的时间(以实际经过的时间为单位)与挂钟时间之比。
查看已执行查询完成的工作量
数据库负载图表用于衡量数据库中所有已执行查询所完成的工作量(以 CPU 秒为单位),按所选维度细分。数据库负载会被划分为您从图表下拉菜单中选择的分布数据。
您可以按以下任一维度细分数据库负载:
- 查询
- 等待事件类型
- 等待事件
- 数据库
- 用户
如需查看数据库中已执行查询完成的工作,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
选择要显示数据的总执行时间,例如 1 小时或 6 小时,或自定义时间。
在 Database Load by execution time(按执行时间划分的“数据库负载”)下拉菜单中,选择要调查的维度。根据您选择的维度,图表会显示所选维度对整体数据库负载的影响。例如,如果您从数据库负载图表下拉菜单中选择 Wait events(等待事件)维度,则数据库负载图表中会显示所选数据库和用户在所选时间范围内发生的所有等待事件的细分数据。
“数据库负载”图表会显示所有九种等待事件类型以及 PostgreSQL 支持的等待事件的数据。根据等待事件和类型的数量,系统会显示前 10 个导致等待的事件和类型。如果等待事件超过 10 个,系统会显示前 9 个等待事件,其余等待事件会归入其他类别。此方法同样适用于“查询”“数据库”和“用户”等其他维度。
查看导致数据库负载增加的主要因素
借助主要维度(按数据库负载)表,您可以查看数据库负载图表中所选时间范围内和选定维度中对数据库负载影响最大的主要维度。根据您在主要维度(按数据库负载)表中选择的维度,您可以找到所选时间范围内的前几位值。
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
选择要显示数据的总执行时间,例如 1 小时或 6 小时,或自定义时间。
在主要维度(按数据库负载)表中,您可以点击以下任一维度:
维度 说明 查询 该表格按总执行时间显示热门标准化查询。对于每个查询,列中显示的数据如下所示:
- 平均执行时间(毫秒)。执行查询的平均时间。
- 总执行时间(毫秒)。特定查询的总执行时间。
- 返回的行数。查询平均提取行数。
- 调用次数。应用调用查询的次数。
- 按图表维度划分的负载百分比。药丸图表显示了图表维度在特定查询中的分布情况。
等待事件类型 该表会显示所选时间范围内发生的热门等待事件类型的列表。
- 平均等待时间(毫秒)。查询在特定等待事件类型中花费的平均时间。
- 总等待时间(毫秒)。查询在特定等待事件类型中花费的总执行时间。
- 等待事件类型计数。在所选时间范围内发生特定等待事件类型的次数。
- 按图表维度划分的负载百分比。该条状图描绘了在“数据库负载”图表下拉菜单中选择的图表维度在特定等待事件类型中的分布情况。
等待事件 该表会显示所选时间范围内发生的热门等待事件列表。
- 平均等待时间(毫秒)。查询在特定等待事件中花费的平均时间。
- 总等待时间(毫秒)。查询在特定等待事件中花费的总执行时间。
- 等待事件计数。在所选时间范围内发生特定等待事件的次数。
- 按图表维度划分的负载百分比。药丸图表显示了在数据库负载图表下拉菜单中选择的图表维度如何在特定等待事件中分布。
数据库 该表格会显示在所选时间范围内所有已执行查询中对负载有贡献的主要数据库列表。
- 在数据库中花费的平均时间(毫秒)。查询在特定数据库中花费的平均时间。
- 在数据库中花费的总时间(毫秒)。查询在特定数据库中花费的总执行时间。
- 按图表维度划分的负载百分比。药丸图表显示了在“数据库负载”图表下拉菜单中选择的图表维度在特定数据库中的分布情况。
用户 此表格会显示所选时间范围内所有已执行查询的热门用户列表。
- 在用户空间中花费的平均时间(毫秒)。查询在特定用户身上花费的平均时间。
- 在用户空间中花费的总时间(毫秒)。查询在特定用户中花费的总执行时间。
- 按图表维度划分的负载百分比。药丸图显示了在“数据库负载”图表下拉菜单中选择的图表维度如何在特定用户之间分布。
查看查询执行时间
AlloyDB 的高级查询数据分析功能会在主要维度(按数据库负载)表中显示导致数据库负载的十大查询。热门查询是指在所选时间范围内对数据库负载贡献最多的查询。后续查询的百分比是相对于最长执行时间而言的。
如需了解主要维度(按数据库负载)中参数的执行时间如何受所选图表维度(查询、等待事件类型、等待事件、数据库和用户)的不同值影响,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
在主要维度(按数据库负载)表中查看按图表维度显示的负载百分比,了解表格中某个参数受到数据库负载图表中哪些参数的影响。
例如,如果您在数据库负载图表中选择所有查询,然后点击主要维度(按数据库负载)表中的查询标签页,按查询显示负载百分比将显示在给定时间段内在所选数据库中产生最多数据库负载的查询的列表。
查看有关查询执行时间的详细信息
您可以在更多详情中查看有关查询执行时间的详细信息,包括您在数据库负载图表和表格中选择的维度、每个等待事件的定义,以及封装在其他类别中的数据。
更多详细信息还会显示查询详情屏幕中未显示的复杂信息的详细信息。此信息包括每个等待事件的定义。
如需查看有关查询执行时间的详细信息,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
在主要维度(按数据库负载)表中,点击相应查询的更多详细信息。
AlloyDB 的高级查询数据分析功能会显示标准化查询($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
此常量值会被忽略,因此高级查询分析可以汇总类似查询并移除该常量可能显示的任何个人身份信息 (PII) 信息。
确定规范化查询的数据库负载
如需按查询执行显示一段时间内所选规范化查询在所选数据库中执行的时间和资源使用情况(以 CPU 秒为单位),请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
点击数据库负载图表中的查询。如需计算数据库负载,数据库负载图表会使用每分钟边界处完成的标准化查询所花费的时间与实际经过的时间之比。
数据库负载图表顶部会显示规范化查询的前 10KB 个字符,并移除了聚合和个人身份信息 (PII) 原因的字面量。
为了帮助确定在这些状态中所花时间的分布情况,AlloyDB 的高级查询分析功能会将每个标准化查询加载分布到等待事件和等待事件类型。
您可以使用延迟时间图表来研究查询延迟时间。延迟时间是完成规范化查询所需的时间(实际用时)。并行查询的延迟时间是按实际经过的时间衡量的,即使查询的数据库负载可能更高(由于使用了多个核心来运行查询的一部分)也是如此。
您可以按百分位过滤来查看第 50、第 95 或第 99 百分位,以检测不符合预期执行时间的查询。如需分析规范化查询的历史延迟时间,请更改时间范围。
分析规范化查询
查询计划会为您细化呈现一个查询样本中的不同操作,以便您了解和分析规范化查询。
示例查询计划为与标准化查询相关的查询计划示例提供 EXPLAIN ANALYZE
视图。这些是已执行的查询计划,提供查询计划中每项操作所用的活动时间明细。
如需查看示例查询计划,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
选择要显示数据的总执行时间,例如 1 小时或 6 小时,或自定义时间。
在主要维度(按数据库负载)表中,点击某个查询。
在查询计划示例中,点击图表上的任意一个点可查看相应查询的查询计划。
使用代码监控和排查应用性能问题
高级查询数据分析提供以应用为中心的监控功能,并简化了使用对象关系映射 (ORM) 构建的应用的性能诊断。查询标记可帮助您查找更高级别的结构(例如使用业务逻辑、微服务或一些其他结构)中的问题。您可以在应用中使用代码,以便执行以下操作:
- 监控数据库性能。
- 使用 Sqlcommenter 找出由应用代码导致的性能问题。
- 分析数据库负载。
- 查看每个代码的负载。
如需了解如何在查询数据分析中使用标记,请参阅使用查询数据分析提高查询性能。
排查数据库层的应用问题
高级查询分析提供上下文相关的端到端跟踪视图,可帮助您了解数据库请求针对特定请求的应用问题。上下文中的端到端应用跟踪有助于您确定有问题的查询的来源,例如按模型、视图、控制器和路由确定来源。
启用 OpenTelemetry 后,span 信息会与 SQL 注释内的标记信息一起发送到数据库中。从应用到 Cloud Logging 的跟踪记录会与数据库查询计划跟踪记录相关联,以确定问题的来源。
如需查看上下文轨迹,请按以下步骤操作:
在 Google Cloud 控制台中,前往集群页面。
在集群和实例列表中,点击一个实例。
点击 Query Insights。
选择数据库和用户。
点击主要维度(按数据库负载)表中的任意条目。
在查询数据分析详情页面中,点击端到端。
您还可以使用 Cloud Trace 查看查询计划中每个步骤的端到端跟踪。如需访问 Cloud Trace,请依次选择 Operations > Trace。
常见问题解答
本部分提供了有关高级查询分析功能的常见问题解答。
为什么查询字符串会被截断?
默认情况下,高级查询数据分析会显示查询字符串中的 10 KB。您可以将显示大小增加到 100KB。
为什么我的 CPU 负载高于“数据库负载”图表中的核心线数上限?
CPU 负载会同时考虑运行时以及等待 Linux 调度器调度正在运行的服务器进程的时间,因此 CPU 负载可能会超出核心线数上限。
我可以使用标准查询数据分析指标吗?
可以。标准查询分析会生成可通过 Stackdriver 访问的计数器。您可以使用 Cloud Monitoring API 搭配高级查询分析来获取这些指标。如需了解详情,请参阅 Google Cloud 指标。
查询字符串的长度上限是多少?
对于标准查询分析插件,查询字符串的长度上限为 4.5 KB 字符。对于高级查询分析,默认字符串长度为 10KB,且长度上限为 100KB。
我可以在跨区域复制中使用 AlloyDB 的高级查询数据分析功能吗?
您无法在包含次要实例的集群上为 AlloyDB 启用高级 Query Insights 功能。如果高级查询数据分析功能已启用,那么在集群上创建次要实例之前,您必须先在集群中的所有实例上停用 AlloyDB 的高级查询数据分析功能。