本页面介绍了如何使用 Query Insights 信息中心检测和分析查询的性能问题。
简介
Query Insights 可帮助您检测、诊断和避免 Cloud SQL 数据库的查询性能问题。它支持直观监控并提供诊断信息,帮助您在检测范围之外确定性能问题的根本原因。
借助 Query Insights,您可以监控应用级层的性能,并按模型、视图、控制器、路由、用户和主机跟踪应用栈中有问题的查询的来源。Query Insights 工具可以使用开放式标准和 API 与您现有的应用监控 (APM) 工具和 Trusted Cloud by S3NS服务集成。这样,您就可以使用常用工具监控和排查查询问题。
查询数据分析可以指导您完成以下步骤,帮助您提高 Cloud SQL 查询性能:
Cloud SQL 企业 Plus 版 Query Insights
如果您使用的是 Cloud SQL 企业 Plus 版,则可以在 Query Insights 中访问更多功能,以执行高级查询性能诊断。除了 Query Insights 信息中心的标准功能之外,Cloud SQL 企业 Plus 版 Query Insights 还可让您执行以下操作:
- 捕获并分析所有已执行查询的等待事件。
- 按查询、标记、等待事件类型等其他维度过滤汇总的数据库负载。
- 捕获所有已执行查询的查询计划。
- 每分钟采样最多 200 个查询计划。
- 捕获更长的查询文本(最多 100 KB)。
- 获取近乎实时的指标更新(以秒为单位)。
- 维持更长的 30 天指标保留期限。
- 从索引顾问处获取索引建议。
- 终止活跃查询中的会话或长时间运行的事务。
- 使用 AI 辅助式问题排查功能(预览版)。
下表比较了 Cloud SQL 企业版 Query Insights 与 Cloud SQL 企业 Plus 版 Query Insights 的运行要求和功能。
比较领域 | Cloud SQL 企业版 Query Insights | Cloud SQL 企业 Plus 版 Query Insights |
---|---|---|
支持的数据库版本 | PostgreSQL 9.6 或更高版本 | PostgreSQL 12 或更高版本 |
支持的机器类型 | 所有机器类型都支持 | 使用共享核心机器类型的实例或读取副本实例不支持 |
支持的区域 | Cloud SQL 区域位置 | Cloud SQL 企业 Plus 版区域位置 |
指标保留期限 | 7 天 | 30 天 |
查询长度上限 | 4500 字节 | 100 KB |
查询计划样本上限 | 20 | 200 |
等待事件分析 | 不可用 | 可用 |
索引顾问建议 | 不可用 | 可用 |
终止活跃查询中的会话或长时间运行的事务 | 不可用 | 可用 |
AI 辅助式问题排查(预览版) | 不可用 | 可用 |
启用 Cloud SQL 企业 Plus 版 Query Insights
如需启用 Cloud SQL 企业 Plus 版 Query Insights,请在 Cloud SQL 企业 Plus 版实例上启用 Query Insights 时选择启用企业 Plus 版功能。
价格
在 Cloud SQL 企业版或 Cloud SQL 企业 Plus 版实例上使用 Query Insights 不会产生额外费用。
存储空间要求
Cloud SQL 企业版 Query Insights 不会占用 Cloud SQL 实例存储空间中的任何存储空间。指标存储在 Cloud Monitoring 中。 如需了解 API 请求,请参阅 Cloud Monitoring 价格。Cloud Monitoring 可提供无需支付额外费用便可使用的层级。
Cloud SQL 企业 Plus 版 Query Insights 会将指标数据存储在挂接到 Cloud SQL 实例的同一磁盘上,并需要您启用“存储空间自动扩容”设置。
存储 7 天的数据所需的存储空间约为 36 GB。存储 30 天的数据需要大约 155 GB 的存储空间。Cloud SQL 企业 Plus 版 Query Insights 最多使用 10 MB 的 RAM(共享内存)。Query Insights 在查询完成后的 30 秒内就可以提供指标。需支付适用的存储空间费用。指标存储限制
Cloud SQL 企业 Plus 版实例的 Query Insights 存在以下限制:
- 如果您的实例正承受繁重的系统负载,那么当您在 Query Insights 信息中心内查询指标数据时,查询可能加载速度较慢,或者会超时。
- 如果您使用旧备份恢复实例,那么对于 Cloud SQL 企业 Plus 版 Query Insights,您可能会丢失备份时间至实例恢复时间之间的指标。例如,如果您使用 4 月 25 日创建的备份在 4 月 30 日恢复实例,那么您可能会丢失 4 月 25 日至 4 月 30 日之间的所有指标。
准备工作
在使用 Query Insights 之前,请执行以下操作。
- 添加所需的角色和权限。
- 启用 Cloud Trace API。
- 如果您要使用 Cloud SQL 企业 Plus 版 Query Insights,请确保为实例启用启用存储空间自动扩容功能。
所需的角色和权限
如需使用 Query Insights,您需要授予预定义角色、创建自定义角色或者为用户账号提供所需的 Identity and Access Management 权限。
如需详细了解如何授予角色,请参阅管理访问权限。
如需获得访问 Query Insights 信息中心内的历史查询执行数据所需的权限,请让您的管理员为您授予托管 Cloud SQL 实例的项目的以下 IAM 角色:
-
Database Insights Monitoring Viewer (
roles/databaseinsights.monitoringViewer
) -
Cloud SQL Viewer (
roles/cloudsql.viewer
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色可提供访问 Query Insights 信息中心内的历史查询执行数据所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
访问 Query Insights 信息中心内的历史查询执行数据需要以下权限:
-
databaseinsights.aggregatedStats.query
-
databaseinsights.timeSeries.query
roles/databaseinsights.viewer
) 预定义角色。然后在 Cloud SQL 中,您可以让管理员为您授予以下预定义角色之一:
- Cloud SQL Editor (
roles/cloudsql.editor
) - Cloud SQL Admin (
roles/cloudsql.admin
)
启用 Cloud Trace API
如需查看查询计划及其端到端视图,您的 Trusted Cloud 项目必须启用 Cloud Trace API。此设置可让您的Trusted Cloud 项目接收来自已经过身份验证的来源的跟踪记录数据,而无需额外付费。此数据可帮助您检测和诊断实例中的性能问题。
如需确认已启用 Cloud Trace API,请按照以下步骤操作:
- 在 Trusted Cloud 控制台中,前往 API 和服务:
- 点击启用 API 和服务。
- 在搜索栏中,输入
Cloud Trace API
。 - 如果系统显示 API 已启用,则表示此 API 已启用,您无需执行任何操作。否则,请点击启用。
启用存储空间自动扩容功能
如果您要使用 Cloud SQL 企业 Plus 版 Query Insights,请确保将实例的启用存储空间自动扩容功能设置保持为启用状态。默认情况下,系统会为 Cloud SQL 实例启用此选项。
如果您之前停用了此实例设置,并且想要启用 Cloud SQL 企业 Plus 版 Query Insights,请先重新启用存储空间自动扩容功能。在停用存储空间自动扩容功能的情况下无法启用 Cloud SQL 企业 Plus 版 Query Insights。
启用 Query Insights
启用 Query Insights 时,所有其他操作都会暂停。这些操作包括健康检查、日志记录、监控和其他实例操作。
控制台
为实例启用 Query Insights
-
在 Trusted Cloud 控制台中,前往 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 在配置图块中,点击修改配置。
- 在自定义实例部分中,展开 Query Insights。
- 选中启用查询数据分析复选框。
- 可选:为实例选择其他功能。部分功能仅适用于 Cloud SQL 企业 Plus 版。
- 点击保存。
功能 | 说明 | Cloud SQL 企业版 | Cloud SQL 企业 Plus 版 |
---|---|---|---|
启用企业 Plus 版功能 | 选中此复选框可在 Cloud SQL 中启用 Cloud SQL 企业 Plus 版 Query Insights。Cloud SQL 企业 Plus 版 Query Insights 可让您终止活跃查询中的会话和长时间运行的事务,并将指标数据保留期限延长至 30 天。您必须选中此复选框才能启用 AI 辅助式问题排查(预览版)。 | 不可用 | 可用
默认值:已停用 |
活跃查询分析 | 使您可以查看当前正在运行的查询的详细信息。如果在 Cloud SQL 企业 Plus 版上启用,您还可以终止会话和长时间运行的事务。选中此复选框可为 Cloud SQL for PostgreSQL 实例启用活跃查询。如需了解详情,请参阅监控活跃查询。 | 可用
默认值:已停用 |
可用
默认值:已停用 |
索引顾问建议 | 提供索引建议,以加快查询处理速度。如需了解详情,请参阅使用索引顾问。启用索引顾问需要重启实例。停用索引顾问不需要重启。 | 不可用 | 可用 默认值:已停用 |
AI 辅助式问题排查 | 选中此复选框可启用性能异常值检测、根本原因和情况分析,并获取有关修复查询和数据库问题的建议。此功能目前为预览版,您只能使用 Trusted Cloud 控制台启用和访问此功能。如需了解详情,请参阅使用 AI 辅助功能进行观察并排查问题。 | 不可用 | 可用
默认值:已停用 |
存储客户端 IP 地址 | 选中此复选框可启用客户端 IP 地址存储功能。Cloud SQL 可以存储查询的来源 IP 地址,并使您可以对相关数据进行分组,以便针对其运行指标。查询来自多个主机。查看来自客户端 IP 地址的查询的图表有助于识别问题的来源。 | 可用
默认值:已停用 |
可用
默认值:已停用 |
存储应用标记 | 选中此复选框可启用应用标记存储。存储应用标记有助于您确定正在发出请求的 API 和“模型-视图-控制器”(MVC) 路由,并对数据进行分组以对其运行指标。此选项要求您使用 sqlcommenter 开源对象关系映射 (ORM) 自动插桩库为查询添加一组特定标记注释。此信息有助于 Query Insights 确定问题的来源和问题所属的 MVC。应用路径可以帮助您进行应用监控。 | 可用
默认值:已停用 |
可用
默认值:已停用 |
自定义查询长度 |
选中此复选框可自定义查询字符串长度限制。更长的查询长度对于分析查询更有用,但也需要更多内存。任何超出指定限制的查询字符串在显示时都会被截断。 更改查询长度限制需要重启实例。您仍然可以为超出长度上限的查询添加标记。 |
您可以设置介于 256 字节到 4500 字节之间的限制(以字节为单位)。默认值: 1024 。
|
您可以指定介于 1024 到 100000 之间的限制(以字节为单位)。
默认值: 10000 字节。
|
设置最大采样率 |
选中此复选框可设置最大采样率。采样率是系统每分钟在实例上的所有数据库中捕获的已执行查询计划样本的数量。提高采样率或许能为您带来更多数据点,但可能会增加性能开销。
如需停用采样,请将该值设置为 0 。
|
您可以将此值更改为 0 到 20 之间的数字。
默认值: 5 。
|
您可以将该最大值提高到 200 以提供更多数据点。
默认值: 200
|
为多个实例启用 Query Insights
-
在 Trusted Cloud 控制台中,前往 Cloud SQL 实例页面。
- 点击任意行上的更多操作 菜单。
- 选择启用查询数据分析。
- 在对话框中,选中为多个实例启用 Query Insights 复选框。
- 点击启用。
- 在随后出现的对话框中,选择您要为其启用 Query Insights 的实例。
- 点击启用查询数据分析。
gcloud
如需使用 gcloud
为 Cloud SQL 实例启用 Query Insights,请在将 INSTANCE_ID 替换为实例的 ID 后运行 gcloud sql instances patch
并结合使用 --insights-config-query-insights-enabled
标志,如下所示。
gcloud sql instances patch INSTANCE_ID \ --insights-config-query-insights-enabled
此外,请使用以下一个或多个可选标志:
--insights-config-record-client-address
存储查询的来源客户端 IP 地址,并帮助您对相关数据进行分组,以便针对其运行指标。查询来自多个主机。查看来自客户端 IP 地址的查询的图表有助于识别问题的来源。
--insights-config-record-application-tags
存储应用标记,以帮助您确定正在发出请求的 API 和模型视图控制器 (MVC) 路由,并对数据进行分组以对其运行指标。此选项要求您使用一组特定标记对查询进行注释。为此,您可以使用 sqlcommenter 开源对象关系映射 (ORM) 自动插桩库。此信息有助于 Query Insights 识别问题的来源和问题所属的 MVC。应用路径可以帮助您进行应用监控。
--insights-config-query-string-length
设置默认查询长度限制。更长的查询长度对于分析查询更有用,但也需要更多内存。更改查询长度需要重启实例。 您仍然可以为超出长度上限的查询添加标记。 对于 Cloud SQL 企业版,您可以指定一个介于
256
到4500
之间的值(以字节为单位)。默认查询长度为1024
字节。对于 Cloud SQL 企业 Plus 版,您可以指定一个介于1024
到100000
之间的限制(以字节为单位)。默认值为10000
字节。--insights-config-query-plans-per-minute
默认情况下,实例上的所有数据库每分钟最多捕获 5 个已执行的查询计划样本。提高采样率或许能为您带来更多数据点,但可能会增加性能开销。 如需停用采样,请将此值设置为
0
。对于 Cloud SQL 企业版,您可以在 0 到 20 之间更改值。对于 Cloud SQL 企业 Plus 版,您可以将最大值增加到 200,以提供更多数据点。 默认情况下,最大采样率为实例上所有数据库每分钟200
个查询计划样本。
替换以下内容:
- INSIGHTS_CONFIG_QUERY_STRING_LENGTH:要存储的查询字符串长度(以字节为单位)。
- API_TIER_STRING:用于实例的自定义实例配置。
- REGION:实例的区域。
gcloud sql instances patch INSTANCE_ID \ --insights-config-query-insights-enabled \ --insights-config-query-string-length=INSIGHTS_CONFIG_QUERY_STRING_LENGTH \ --insights-config-query-plans-per-minute=QUERY_PLANS_PER_MINUTE \ --insights-config-record-application-tags \ --insights-config-record-client-address \ --tier=API_TIER_STRING \ --region=REGION
REST v1
如需使用 REST API 为 Cloud SQL 实例启用 Query Insights,请使用 insightsConfig
设置调用 instances.patch
方法。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- INSTANCE_ID:实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "settings" : { "insightsConfig" : { "queryInsightsEnabled" : true, "recordClientAddress" : true, "recordApplicationTags" : true, "queryStringLength" : 1024, "queryPlansPerMinute" : 20, } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2025-03-28T22:43:40.009Z", "operationType": "UPDATE", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
Terraform
如需使用 Terraform 为 Cloud SQL 实例启用 Query Insights,请将 query_insights_enabled
标志设置为 true
。
此外,您可以使用以下一个或多个可选标志:
query_string_length
:对于 Cloud SQL 企业版,您可以指定一个介于256
到4500
之间的值(以字节为单位)。默认查询长度为1024
字节。对于 Cloud SQL 企业 Plus 版,您可以指定一个介于1024
到100000
之间的限制(以字节为单位)。 默认值为10000
字节。record_application_tags
:如果要记录查询中的应用标记,请将值设置为true
。record_client_address
:如果要记录客户端 IP 地址,请将值设置为true
。默认值为false
。-
query_plans_per_minute
:对于 Cloud SQL 企业版,您可以将该值设置为0
到20
之间的值。默认值为5
。 对于 Cloud SQL 企业 Plus 版,您可以将最大值增加到200
,以提供更多数据点。 默认最大采样率为实例上所有数据库每分钟200
个查询计划样本。
示例如下:
resource "google_sql_database_instance" "INSTANCE_NAME" { name = "INSTANCE_NAME" database_version = "POSTGRESQL_VERSION" region = "REGION" root_password = "PASSWORD" deletion_protection = false # set to true to prevent destruction of the resource settings { tier = "DB_TIER" insights_config { query_insights_enabled = true query_string_length = 2048 # Optional record_application_tags = true # Optional record_client_address = true # Optional query_plans_per_minute = 10 # Optional } } }
如需在 Trusted Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Trusted Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Trusted Cloud 项目以查看结果。在 Trusted Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
Query Insights 在查询完成后的几分钟内就可以提供指标。查看 Cloud Monitoring 数据保留政策。
查询数据分析跟踪记录存储在 Cloud Trace 中。查看 Cloud Trace 数据保留政策。
查看查询数据分析信息中心
查询数据分析信息中心会基于您选择的因素显示查询负载。查询负载是衡量选定时间范围内实例中所有查询的总工作量。 该信息中心提供了一系列过滤条件,可帮助您查看查询负载。
如需打开 Query Insights 信息中心,请按照以下步骤操作:
- 如需打开实例的概览页面,请点击实例名称。
- 在 Cloud SQL 导航菜单中,点击 Query Insights,或在实例概览页面上点击前往 Query Insights,详细了解查询和性能。
Query Insights 信息中心会打开。Query Insights 信息中心会显示有关实例的以下信息,具体取决于您使用的是 Cloud SQL 企业版 Query Insights 还是 Cloud SQL 企业 Plus 版 Query Insights:
Cloud SQL 企业 Plus 版

- 所有查询:显示所选时间范围内所有查询的数据库负载。每个查询都有各自的颜色编码。如需查看特定查询的某个时间点,请将指针悬停在相应查询的图表上。
- 数据库:过滤特定数据库或所有数据库上的查询负载。
- 用户:过滤来自特定用户账号的查询负载。
- 客户端地址:过滤来自特定 IP 地址的查询查询。
- 时间范围:按时间范围(如 1 小时、6 小时、1 天、7 天、30 天或自定义范围)过滤查询负载。
- 等待事件类型:按 CPU 和锁定等待事件类型过滤查询负载。
- 查询、等待事件类型、数据库、用户、标记和客户端地址:在图表中按对数据库负载影响最大的主要维度进行排序。请参阅过滤数据库负载。
Cloud SQL 企业版

- 数据库:过滤特定数据库或所有数据库上的查询负载。
- 用户:过滤来自特定用户账号的查询负载。
- 客户端地址:过滤来自特定 IP 地址的查询查询。
- 时间范围:按时间范围(如 1 小时、6 小时、1 天、7 天、30 天或自定义范围)过滤查询负载。
- 数据库负载图表:根据过滤的数据显示查询负载图表。
- CPU 容量、CPU 和 CPU 等待、IO 等待和锁定等待:根据您选择的选项过滤负载。如需详细了解每种过滤条件,请参阅查看热门查询的数据库负载。
- 查询和标记:按所选查询或所选 SQL 查询标记过滤查询负载。请参阅过滤数据库负载。
查看所有查询的数据库负载
数据库查询负载用于衡量所选数据库中执行的查询在一段时间内所执行的工作(以 CPU 秒为单位)。每个正在运行的查询都使用或等待 CPU 资源、IO 资源或锁定资源。数据库查询负载是在给定时间范围内完成的所有查询所花费的时间与挂钟时间之比。
顶级 Query Insights 信息中心显示数据库负载 - 所有热门查询图表。通过信息中心上的下拉菜单,您可以过滤特定数据库、用户或客户端地址的图表。
Cloud SQL 企业 Plus 版

Cloud SQL 企业版

图表中的彩色线条表示查询负载,分为以下类别:
- CPU 容量:实例上可用的 CPU 数量。
- CPU 和 CPU 等待:活跃状态下查询所花费的时间与实际用时之比。IO 和锁定等待不会阻止处于活跃状态的查询。此指标可能意味着查询正在使用 CPU,或正在等待 Linux 调度器在其他进程正在使用 CPU 时安排用于运行查询的服务器进程。
- IO 等待:等待 IO 的查询所花费的时间与实际用时之比。IO 等待包括读取 IO 等待和写入 IO 等待。 如果您需要有关 IO 等待的信息明细,可以在 Cloud Monitoring 中查看这些信息。如需了解详情,请参阅 Cloud SQL 指标。如需了解详情,请参阅 PostgreSQL 事件表。
- 锁定等待:等待锁定的查询所花费的时间与实际用时之比。其中包括锁定等待、LwLock 等待和缓冲区 pin 锁定等待。如需查看锁定等待的信息明细,请使用 Cloud Monitoring。如需了解详情,请参阅 Cloud SQL 指标。
图表中的彩色线条表示每个数据库负载(按执行时间)。 查看图表并使用过滤选项来探索以下问题:
- 查询负载较高吗?图表是否随着时间推移出现峰值或上升?如果未看到高负载,则问题与您的查询无关。
- 负载高的时间有多长?是现在才高还是长时间都高?使用范围选择器选择不同的时间段,以了解问题持续了多长时间。放大可查看观察到查询负载峰值的时间窗口。缩小可查看长达一周的时间轴。
- 导致高负载的原因是什么?您可以选择检查 CPU 容量、CPU 和 CPU 等待、锁定等待或 IO 等待的选项。这些选项中的每一个选项的图表都是不同的颜色,方便您找到负载最高的选项。图表上的深蓝色线条表示系统的最大 CPU 容量。它可让您比较查询负载与 CPU 系统容量上限。这种比较可帮助您了解实例是否耗尽 CPU 资源。
- 哪个数据库遇到了负载?从“数据库”下拉菜单中选择不同的数据库,找出负载最高的数据库。
- 特定用户或 IP 地址是否会导致更高的负载?从下拉菜单中选择不同的用户和地址,以找出导致负载较高的用户和地址。
过滤数据库负载
您可以按查询或标记过滤数据库负载。 如果您使用 Cloud SQL 企业 Plus 版 Query Insights,则可以自定义数据库负载图表,以使用以下任一维度细分显示的数据:所有查询
等待事件类型
等待事件
数据库
用户
标签
客户端地址
如需自定义数据库负载图表,请从数据库负载(按执行时间)下拉菜单中选择一个维度。
查看数据库负载的主要影响因素
如需查看数据库负载的主要影响因素,您可以使用主要维度(按数据库负载)表格。主要维度(按数据库负载)表格会针对您在数据库负载(按执行时间)图表下拉菜单中选择的时间段和维度,显示相应的主要影响因素。您可以修改时间段或维度,以查看不同维度或时间段的相应主要影响因素。
在主要维度(按数据负载)表格中,您可以选择以下标签页。
Tab | 说明 |
---|---|
查询 | 表格会按总执行时间显示热门标准化查询。对于每个查询,列中显示的数据如下所示:
|
等待事件类型 | 该表格会列出所选时间段内发生的热门等待事件类型。该表格仅适用于 Cloud SQL 企业 Plus 版 Query Insights。
|
等待事件 | 该表格会列出所选时间段内发生的热门等待事件。该表格仅适用于 Cloud SQL 企业 Plus 版 Query Insights。
|
数据库 | 该表格会列出在所选时间段内所有执行的查询中对负载产生影响的主要数据库。
|
用户 | 该表格会列出在所选时间段内所有执行的查询中的热门用户。
|
标记 | 如需了解标记,请参阅按查询标记过滤。 |
客户端地址 | 该表格会列出在所选时间段内所有执行的查询中的热门用户。
|
按查询过滤
热门查询表概述了导致查询加载次数最多的查询。该表按照 Query Insights 信息中心上选择的时间范围和选项显示所有标准化查询。它会按您选择的时间范围内的总执行时间对查询排序。
Cloud SQL 企业 Plus 版
如需对表进行排序,请选择列标题。

Cloud SQL 企业版
如需对表进行排序,请从过滤查询中选择列标题或属性。

下表显示了以下属性:
- 查询:标准化查询字符串。默认情况下,Query Insights 仅显示查询字符串中的 1024 个字符。标记为
UTILITY COMMAND
的查询通常包含BEGIN
、COMMIT
、EXPLAIN
命令或封装容器命令。 - 数据库:对其运行查询的数据库。
- 建议:为提高查询性能而提供的建议,例如创建索引。
- 按总时间的负载/按 CPU 的负载/按 IO 等待的负载/按锁定等待的负载:用于过滤特定查询以找到最大负载的选项。
- 负载百分比(按查询):各个查询的负载百分比。
- 分析延迟时间:如果您为此实例启用了 AI 辅助式问题排查(预览版),则可以点击此链接来排查查询速度缓慢问题。
- 平均执行时间(毫秒):查询执行的平均时间。
- 调用次数:应用调用查询的次数。
- 返回的平均行数:为查询返回的平均行数。
Query Insights 仅存储和显示标准化查询。
默认情况下,Query Insights 不会收集 IP 地址或标记信息。您可以启用 Query Insights 来收集此信息,在需要时也可以停用收集功能。
查询计划跟踪记录不会收集或存储任何常量值,并会移除常量可能显示的任何 PII 信息。
对于 PostgreSQL 9.6 和 10,Query Insights 会显示标准化查询,即 ?
替换字面量常量值。在以下示例中,名称常量会被移除,并会替换成 ?
。
UPDATE "demo_customer" SET "customer_id" = ?::uuid, "name" = ?, "address" = ?, "rating" = ?, "balance" = ?, "current_city" = ?, "current_location" = ? WHERE "demo_customer"."id" = ?
对于 PostgreSQL 11 及更高版本,$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
按查询标记过滤
如需排查应用问题,您必须先将标记添加到 SQL 查询。查询加载标记提供选定标记的查询负载随时间的变化情况。
查询数据分析提供以应用为中心的监控功能,可诊断使用 ORM 构建的应用的性能问题。如果您负责整个应用栈,则 Query Insights 可从应用视图提供查询监控。查询标记可帮助您找到更高级别的结构(例如使用业务逻辑或微服务)中的问题。
您可以按业务逻辑标记查询,例如使用付款、库存、业务分析或配送标记等。然后,您可以找到由各种业务逻辑创建的查询负载。例如,您可能会观察到意外事件,例如业务分析标记在下午 1 点出现峰值,或上周付款服务趋势出现异常增长。
如需计算标记的数据库负载,Query Insights 会采用使用所选标记的每个查询所花费的时间。该工具使用挂钟时间来计算分钟边界处的完成时间。
在 Query insights 信息中心内,如需查看标记表,请选择标记。该表按总加载时间对标记进行排序。

您可以通过过滤标记中的属性或点击列标题对表进行排序。下表显示了以下属性:
- 操作、控制器、框架、路由、应用、数据库驱动程序:您添加到查询的每个属性都会显示为一列。如果您想按标记过滤,必须至少添加这些属性中的一个。
- 按总时间的负载/按 CPU 的负载/按 IO 等待的负载/按锁定等待的负载:用于过滤特定查询以找到每个选项的最大负载的选项。
- 平均执行时间(毫秒):查询运行的平均时间。
- 平均返回行数:查询平均返回行数。
- 调用次数:应用调用查询的次数。
- 数据库:运行查询的数据库。
查看特定查询或标记的查询详细信息
如需确定特定查询或标记是否为问题的根本原因,请在查询标签页或标记标签页中分别执行以下操作:
- 如需按降序排序列表,请点击按总时间对负载进行排序标题。
- 点击列表顶部的查询或标记。它具有最高的负载,所耗时间比其他虚拟机更长。
查询详情页面会打开,显示所选查询或标记的详细信息。
检查特定查询负载
所选查询的查询详情页面如下所示:

数据库加载 - 特定查询图表显示规范化查询在一段时间内所执行的工作(以 CPU 秒为单位)。计算负载所用的时间是每分钟边界处完成的标准化查询所花费的时间与实际用时之比。位于表格的顶部,显示了标准化查询的前 1024 个字符,并移除了聚合和 PII 原因的字面量。

与总查询图一样,您可以按 Database、User 和 Client Address 过滤特定查询的负载。查询负载分为 CPU 容量、CPU 和 CPU 等待、IO 等待和锁定等待。
检查带有特定标记的查询负载
所选标记的信息中心如下所示。例如,如果来自微服务付款的所有查询都标记为 payment
,您可以通过查看 payment
标记来查看热门查询负载量。

数据库负载 - 特定标记图表显示一段时间内与所选标记匹配的查询在所选数据库中执行的工作(以 CPU 秒为单位)。与总查询图一样,您可以按 Database、User 和 Client Address 过滤特定标记的负载。
检查采样查询计划中的操作
查询计划会获取查询的示例,并将其拆分为单独的操作。它解释并分析查询中的每个操作。
查询计划示例图表显示了在特定时间运行的所有查询计划以及每个计划运行的时长。您可以更改每分钟捕获查询计划样本的速率。请参阅启用 Query Insights。

默认情况下,右侧面板会显示耗时最长的示例查询计划的详细信息,如查询计划示例图表中所示。如需查看其他示例查询计划的详细信息,请点击图表上的相关圆圈。展开的详细信息显示查询计划中的所有操作的模型。
每项操作都会显示延迟时间、返回的行数以及该操作的费用。选择操作后,您可以查看更多详细信息,例如共享命中块、架构类型、循环和方案行。

通过查看以下问题来缩小问题范围:
- 资源消耗量是多少?
- 它与其他查询有何关系?
- 消耗量是否随着时间的推移而变化?
检查由示例查询生成的跟踪记录
除了查看示例查询计划之外,您还可以使用 Query Insights 来查看示例查询的上下文中的端到端应用跟踪记录。此跟踪记录可通过显示特定请求的数据库活动,来帮助您确定有问题的查询的来源。此外,应用在请求期间发送到 Cloud Logging 的日志条目会与跟踪记录相关联,这有助于您进行调查。
如需查看上下文相关跟踪记录,请执行以下操作:
- 在示例查询屏幕中,点击端到端跟踪记录标签页。此标签页会显示一个甘特图,其中详细列出了查询生成的跟踪记录的 span(即各个操作的记录)。
- 如需查看每个 span 的更多详细信息(例如属性和元数据),请选择相应 span。
您还可以在 Trace 探索器页面中查看跟踪记录。为此,请点击在 Cloud Trace 中查看。如需详细了解如何使用 Trace 探索器页面探索跟踪记录数据,请参阅查找和探索跟踪记录。
检查延迟时间
延迟时间是完成标准化查询所需的时间(实际用时)。您可以使用延迟时间图表来检查查询或标记的延迟时间。延迟时间信息中心显示第 50、95 和 99 百分位的延迟时间,以找到离群值行为。
下图显示针对特定查询的第 50 百分位的数据库负载图表,选择 CPU 容量、CPU 和 CPU 等待时间、IO 等待和锁定等待过滤条件。

并行查询的延迟时间是按实际用时衡量的,即使查询负载可能更高(由于使用了多个核心来运行查询的一部分)也是如此。
通过查看以下问题来缩小问题范围:
- 导致高负载的原因是什么?选择查看 CPU 容量、CPU 和 CPU 等待、I/O 等待或锁定等待的选项。
- 负载高的时间有多长?只是现在高吗?还是长时间位于高负载?更改时间范围以查找加载开始效果不佳的日期和时间。
- 延迟时间是否存在急剧增加? 更改时间窗口以研究标准化查询的历史延迟时间。
向 SQL 查询添加标记
标记 SQL 查询可简化应用问题排查。您可以使用 sqlcommenter 自动或手动向 SQL 查询添加标记。
将 sqlcommenter 与 ORM 搭配使用
使用 ORM 而不是直接编写 SQL 查询时,您可能找不到导致性能问题的应用代码。您可能还需要分析应用代码对查询性能的影响。为了解决此问题,Query Insights 提供了一个名为 sqlcommenter 的开源库。对于使用 ORM 工具检测哪些应用代码导致性能问题的开发者,此库非常有用。
如果您同时使用 ORM 和 sqlcommenter,则系统会自动创建标记。您无需在应用中添加或更改代码。
您可以在应用服务器上安装 sqlcommenter。插桩库允许将 MVC 框架的应用信息连同查询一起作为 SQL 注释一起传播到数据库。数据库会获取这些标记,并开始按标记记录和聚合统计信息,这些统计信息与规范化查询汇总的统计信息不同。查询数据分析会显示标记,以便让您了解哪个应用导致查询负载,并找到导致性能问题的应用代码。
在 SQL 数据库日志中检查结果时,结果如下所示:
SELECT * from USERS /action='run+this', controller='foo%3', traceparent='00-01', tracestate='rojo%2'/
支持的标记包括控制器名称、路由、框架和操作。
以下编程语言支持 sqlcommenter 中的 ORM 工具集:
Python |
|
Java |
|
Ruby |
|
Node.js |
|
PHP |
|
如需详细了解 sqlcommenter 以及如何在 ORM 框架中使用 sqlcommenter,请参阅 sqlcommenter 文档。
使用 sqlcommenter 添加标记
如果您未使用 ORM,则必须以正确的 SQL 注释格式手动将 sqlcommenter 标记或注释添加到 SQL 查询。您还必须使用包含序列化键值对的注释来扩充每个 SQL 语句。请至少使用以下其中一个密钥:
action=''
controller=''
framework=''
route=''
application=''
db driver=''
查询数据分析会丢弃所有其他键。
被阻塞的活跃查询
如果特定活跃查询被阻塞或运行时间远超预期,则可能会阻塞其他相关查询。
Cloud SQL 可让您选择终止特定的长时间运行或被阻塞的活跃查询。
如需了解详情,请参阅被阻塞的活跃查询。
停用 Query Insights
控制台
如需使用 Trusted Cloud 控制台为 Cloud SQL 实例停用 Query Insights,请按照以下步骤操作:
-
在 Trusted Cloud 控制台中,前往 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 在配置图块中,点击修改配置。
- 在配置选项部分中,展开查询数据分析。
- 取消选中启用查询数据分析复选框。
- 点击保存。
gcloud
如需使用 gcloud
为 Cloud SQL 实例停用 Query Insights,请在将 INSTANCE_ID 替换为实例的 ID 后运行 gcloud sql instances patch
并结合使用 --no-insights-config-query-insights-enabled
标志,如下所示。
gcloud sql instances patch INSTANCE_ID \ --no-insights-config-query-insights-enabled
REST
如需使用 REST API 为 Cloud SQL 实例停用 Query insights,请调用 instances.patch
方法并将 queryInsightsEnabled
设置为 false
,如下所示。
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID。
- instance-id:实例 ID。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
请求 JSON 正文:
{ "settings" : { "insightsConfig" : { "queryInsightsEnabled" : false } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "PENDING", "user": "user@example.com", "insertTime": "2021-01-28T22:43:40.009Z", "operationType": "UPDATE", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
停用 Cloud SQL 企业 Plus 版 Query Insights
如需停用 Cloud SQL 企业 Plus 版 Query Insights,请执行以下操作:
-
在 Trusted Cloud 控制台中,前往 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 点击修改。
- 在自定义实例部分中,展开 Query Insights。
- 清除启用企业 Plus 版功能复选框。
- 点击保存。
后续步骤
- 发布博客:利用最新 Cloud SQL 企业 Plus 版 Query Insights 更快地解决数据库瓶颈问题
- 查看 Cloud SQL 指标。
Query Insights 指标类型字符串以
database/postgresql/insights
开头。 - 博客:使用 Cloud SQL Insights 提升您的查询性能问题排查技能
- 视频:介绍 Cloud SQL Insights
- 播客:Cloud SQL Insights
- Insights Codelab
- 优化高 CPU 用量
- 优化高内存用量
- 博客:介绍 Sqlcommenter:开源 ORM 自动插桩库
- 博客:使用 Sqlcommenter 启用查询标记