使用查询数据分析来提高查询性能

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

简介

Query Insights 可帮助您检测、诊断和避免 Cloud SQL 数据库的查询性能问题。它支持直观监控并提供诊断信息,帮助您在检测范围之外确定性能问题的根本原因。

查询数据分析可以指导您完成以下步骤,帮助您提高 Cloud SQL 查询性能:

Cloud SQL 企业 Plus 版的查询分析

如果您使用的是 Cloud SQL 企业 Plus 版,则可以使用查询分析中的其他功能来执行高级查询性能诊断。除了“查询数据分析”信息中心的标准功能之外,Cloud SQL 企业 Plus 版的查询数据分析还可让您执行以下操作:

  • 捕获较长的查询文本(最多 20 KB)
  • 延长指标的保留期限(30 天)
  • 从索引顾问获取索引建议
  • 在活跃查询中终止会话

下表比较了 Cloud SQL 企业版的查询分析功能的功能要求和功能与 Cloud SQL 企业 Plus 版的查询分析功能。

比较区域 Cloud SQL 企业版的查询分析 Cloud SQL 企业 Plus 版的查询分析
支持的数据库版本

以下实例的所有版本:

  • SQL Server Web
  • SQL Server Standard
  • SQL Server Enterprise

SQL Server Express 版实例不支持查询分析

SQL Server Enterprise 版本 2019 或 2022
支持的机器类型 所有机器类型均受支持 不适用于使用共享核心机器类型的实例
支持的区域 Cloud SQL 区域位置 Cloud SQL 企业 Plus 版区域位置
指标保留期限 7 天 30 天
查询长度上限 4500 字节 20 KB
索引顾问建议 不可用 可用
终止活跃查询中的会话 不可用 可用

如需在 Cloud SQL 企业 Plus 版实例的预览版期间为其启用 Cloud SQL 企业 Plus 版查询分析,请按照为 Cloud SQL 企业 Plus 版启用查询分析中的步骤操作。

价格

查询数据分析不会产生额外费用。 此外,无需支付费用即可为 Cloud SQL 企业 Plus 版启用查询分析功能(该功能处于预览版阶段)。

存储空间要求

查询分析会在实例上存储指标数据,并且要求您保持“存储空间自动扩容”设置处于启用状态。需支付适用的存储空间费用

准备工作

在使用查询数据分析之前,请执行以下操作。

  1. 添加所需的角色和权限
  2. 确保为实例启用了存储空间自动扩容功能

所需的角色和权限

如需使用查询数据分析,您需要向角色授予所需的 Identity and Access Management 权限,或向具有所需权限的用户账号授予相应权限。

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

如需获得访问“查询数据分析”信息中心中历史查询执行数据所需的权限,请让您的管理员为您授予托管 Cloud SQL 实例的项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含访问“查询分析”信息中心中历史查询执行数据所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需在“查询数据分析”信息中心内访问历史查询执行数据,您需要拥有以下权限:

  • databaseinsights.aggregatedStats.query
  • databaseinsights.timeSeries.query

您也可以使用自定义角色或其他预定义角色来获取这些权限。

例如,在数据库分析中,您可以让管理员为您授予 Database Insights Viewer (roles/databaseinsights.viewer) 预定义角色。然后,在 Cloud SQL 中,您可以让管理员向您授予以下某个预定义角色:

启用存储空间自动扩容功能

确保启用存储空间自动扩容功能的实例设置保持启用状态。

如果您之前停用了此实例设置,请先重新启用存储空间自动扩容功能,然后再启用查询分析。

启用 Query Insights

有权访问 Cloud SQL 信息中心的用户可以访问查询数据分析指标。如果您有权更新实例,则可以启用查询数据分析。如需查看 Cloud SQL 实例所需的权限列表,请参阅 Cloud SQL 项目访问权限控制。如果您没有这些权限,但想要为您的实例启用查询分析,请与您的管理员联系。

控制台

为实例启用查询数据分析

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 配置图块中,点击修改配置
  4. 自定义实例部分,展开查询分析
  5. 选中启用查询数据分析复选框。
  6. 可选。选择以下一个或多个查询数据分析的其他功能:
  7. 自定义查询长度

    默认值:1024

    将查询长度限制设置为 256 个字节到 4500 个字节范围内的指定值。查询速率越高,分析查询就越有用,但它们还需要更多内存。更改查询长度需要重启实例。

  8. 点击保存

为多个实例启用 Query Insights

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击任意行上的更多操作 菜单。
  3. 选择启用查询数据分析
  4. 在对话框中,选中为多个实例启用 Query Insights 复选框。
  5. 点击启用
  6. 在随后出现的对话框中,选择要为其启用查询数据分析的实例。
  7. 点击启用查询数据分析

gcloud

如需使用 gcloud 为 Cloud SQL 实例启用查询数据分析,请在将 INSTANCE_ID 替换为实例的 ID 后,运行带有 --insights-config-query-insights-enabled 标志的 gcloud sql instances patch,如下所示。

    gcloud sql instances patch INSTANCE_ID \
    --insights-config-query-insights-enabled
  

此外,请使用以下一个或多个可选标志:

  • --insights-config-query-string-length

    将默认查询长度限制设置为 256 个字节到 4500 个字节范围内的指定值。默认查询长度为 1024 字节。查询速率越高,分析查询就越有用,但它们还需要更多内存。更改查询长度需要重启实例。

替换以下内容:

  • 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 \
--tier=API_TIER_STRING \
--region=REGION
  

REST v1

如需使用 REST API 为 Cloud SQL 实例启用查询数据分析,请使用 insightsConfig 设置调用 instances.patch 方法。

在使用任何请求数据之前,请先进行以下替换:

  • project-id:项目 ID。
  • instance-id:实例 ID。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

请求 JSON 正文:

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : true } }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 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"
}

Terraform

如需使用 Terraform 为 Cloud SQL 实例启用查询数据分析,请将 query_insights_enabled 标志设置为 true

此外,您还可以使用以下一个或多个可选标志:

  • query_string_length:默认值为 1024,您可以将其配置为介于 2564500 之间的字节值。
  • record_application_tags:如果您想从查询中记录应用代码,请将此值设置为 true
  • record_client_address:如果您想记录客户端 IP 地址,请将此值设置为 true
  • query_plans_per_minute:默认值为 5,您可以将其配置为介于 520 之间的值。

示例如下:

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

指标预计会在查询完成后的几分钟内显示在查询数据分析中。

为 Cloud SQL 企业 Plus 版启用查询分析

您只能使用 Google Cloud 控制台,在 Cloud SQL 实例上为 Cloud SQL 企业 Plus 版启用查询分析。

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 存储空间部分,确认已选中启用存储空间自动扩容功能复选框。
  5. 自定义实例部分,展开查询分析
  6. 选中启用企业 Plus 版功能复选框。
  7. 为 Cloud SQL 企业 Plus 版启用查询分析后,您可以更新以下字段:

    • 自定义查询长度:指定查询长度限制(以字节为单位)。您可以指定介于 25620480 之间的数字。 任何超出指定限制的查询字符串都会在显示时被截断。查询长度限制越高,需要的内存就越多。 默认值为 10240 字节(10 KB)。

  8. 点击保存

查看查询数据分析信息中心

查询数据分析信息中心会基于您选择的因素显示查询负载。查询负载是衡量选定时间范围内实例中所有查询的总工作量。 该信息中心提供了一系列过滤条件,可帮助您查看查询负载。

如需打开查询数据分析信息中心,请按照以下步骤操作:

  1. 如需打开实例的概览页面,请点击实例名称。
  2. 选择左侧导航面板中的查询数据分析标签页,或点击前往“查询数据分析”,详细了解查询和性能链接。

查询数据分析信息中心将会打开。其中会显示实例的以下信息:

显示了 Query Insights 信息中心,其中包含数据库的下拉菜单。在下拉菜单的右侧,有一个用于设置时间范围的过滤条件。

  • 数据库:过滤特定数据库或所有数据库上的查询负载。
  • 时间范围:按时间范围(例如 1 小时、6 小时、1 天、7 天、30 天或自定义范围)过滤查询负载。
  • 数据库负载图表:根据过滤的数据显示查询负载图表。
  • 查询数据库:按所选查询或所选数据库过滤查询负载。请参阅过滤数据库负载

查看所有查询的数据库负载

数据库查询负载用于衡量所选数据库中的查询在一段时间内所执行的工作(以 CPU 秒为单位)。每个正在运行的查询都使用或等待 CPU 资源、IO 资源或锁定资源。数据库查询负载是在给定时间范围内完成的所有查询所花费的时间与挂钟时间之比。

顶级 Query Insights 信息中心显示按执行时间划分的数据库负载图表。您可以使用信息中心上的下拉菜单,过滤出所有数据库或特定数据库的图表。

显示所选数据库的所有已执行查询。

图表中的颜色线条按执行时间显示每个数据库的负载。查看图表并使用过滤选项来探索以下问题:

  • 查询负载较高吗?图表是否随着时间推移或上升?如果您没有看到高负载,则说明问题不是出在查询中。
  • 负载高的时间有多长?只是现在高吗?还是已经很长时间高了?使用范围选择器来选择不同时段,以确定问题持续了多长时间。放大以查看观察到的查询负载峰值的时间范围。缩小时间轴,最多可查看一周的数据。
  • 哪个数据库遇到了负载?从“数据库”下拉菜单中选择不同的数据库,找出负载最高的数据库。

过滤数据库负载

您可以按查询过滤数据库负载。 如果您使用的是 Cloud SQL 企业 Plus 版的查询数据分析,则可以自定义数据库负载图表,以使用以下任一维度对显示的数据进行细分:

  • 所有查询

  • 数据库

如需自定义数据库负载图表,请从按执行时间划分的数据库负载下拉菜单中选择一个维度。

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

如需查看导致数据库负载增加的主要因素,您可以使用主要维度(按数据库负载)表。主要维度(按数据库负载)表会显示您在按执行时间划分的数据库负载图表下拉菜单中选择的时间段和维度的主要贡献者。您可以修改时间段或维度,查看其他维度或时间段的贡献者排名。

主要维度(按数据负载)表中,您可以选择以下标签页。

Tab 说明
查询 该表格按总执行时间显示热门标准化查询。 对于每个查询,列中显示的数据如下所示:
  • 平均执行时间(毫秒):查询执行的平均时间。
  • 总执行时间(毫秒):特定查询的总执行时间。
  • 平均返回行数:查询平均提取的行数。
  • 调用次数:应用调用查询的次数。
数据库 该表格会显示在所选时间段内所有已执行查询中对负载贡献最大的数据库列表。
  • 在数据库中花费的平均时间(毫秒):查询在特定数据库中花费的平均时间。
  • 在数据库中花费的总时间(毫秒):查询在特定数据库中花费的总执行时间。

按查询过滤

查询表概述了导致查询加载次数最多的查询。下表显示了查询数据分析信息中心内所选时间范围和选项的所有标准化查询。它会按您选择的时间段内总执行时间对查询排序。

如需对表格进行排序,请选择所需的列标题。下表显示了以下属性:

  • Query:标准化查询字符串。默认情况下,“查询数据分析”仅显示查询字符串中的 1024 个字符。
  • 数据库:运行查询的数据库。
  • 平均执行时间(毫秒):查询执行的平均时间。
  • 总执行时间(毫秒):查询执行的总时间。
  • 调用次数:应用调用查询的次数。
  • 平均返回行数:查询平均返回行数。

查询数据分析仅存储和显示标准化查询。

停用查询数据分析

控制台

如需使用 Google Cloud 控制台为 Cloud SQL 实例停用查询数据分析,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 配置图块中,点击修改配置
  4. 配置选项部分中,展开查询数据分析
  5. 取消选中启用查询数据分析复选框。
  6. 点击保存

gcloud

如需使用 gcloud 为 Cloud SQL 实例停用查询数据分析,请在将 INSTANCE_ID 替换为实例的 ID 后,运行带有 --no-insights-config-query-insights-enabled 标志的 gcloud sql instances patch,如下所示。

gcloud sql instances patch INSTANCE_ID 
--no-insights-config-query-insights-enabled

REST

如需使用 REST API 为 Cloud SQL 实例停用查询数据分析,请调用 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 版停用查询分析

如需为 Cloud SQL 企业 Plus 版停用查询分析,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 自定义实例部分,展开查询分析
  5. 清除启用企业 Plus 版功能复选框。
  6. 点击保存

后续步骤