使用索引顾问

本页面介绍 Cloud SQL for PostgreSQL 索引顾问,以及如何查看和应用其索引建议。

Cloud SQL for PostgreSQL 提供全托管式索引顾问,用于定期跟踪您的数据库处理的查询。索引顾问会定期分析这些查询,以建议可提高查询性能的新索引。借助索引顾问,您可以检测并修复系统和查询的性能问题。

索引顾问如何运作?

索引顾问通过执行以下操作来帮助您改善查询处理:

  • 通过用于创建索引的 SQL 命令推荐一组索引。
  • 提供数据以帮助您评估建议索引,例如,估算存储空间大小以及索引对查询的影响。
索引顾问会存储并显示 CREATE INDEX 命令,其中包含数据库名称、架构名称、表名称和列名称。跟踪的查询是已移除所有字面量的所有规范化查询。

索引建议采用静态加密。

限制

Cloud SQL for PostgreSQL 索引顾问具有以下限制:

  • 索引顾问仅提供 CREATE INDEX 建议。
  • 索引顾问不支持具有以下配置的实例:
    • Cloud SQL 企业版实例
    • 读取副本实例

准备工作

如需获取索引顾问建议,您必须使用 Cloud SQL 企业 Plus 版,并为 Cloud SQL 实例启用 Cloud SQL 企业 Plus 版 Query Insights

所需的角色和权限

如需获得获取索引顾问建议所需的权限,请让您的管理员为您授予托管 Cloud SQL 实例的项目的 Cloud SQL Viewer (roles/cloudsql.viewer) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含获取索引顾问建议所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需获取索引顾问建议,您需要拥有以下权限:

  • databaseinsights.recommendations.query
  • databaseinsights.resourceRecommendations.query

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

启用索引顾问建议

如需启用索引顾问建议,请执行以下操作:

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。。
  3. 配置图块中,点击修改配置
  4. 自定义实例部分中,展开 Query Insights
  5. 确保启用 Query Insights 处于启用状态。
  6. 如果尚未选择,请选择启用企业 Plus 版功能
  7. 选择启用索引顾问
  8. 点击保存

停用索引顾问建议

如需停用索引顾问建议,请执行以下操作:

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 配置图块中,点击修改配置
  4. 自定义实例部分中,展开 Query Insights
  5. 取消选中启用索引顾问复选框。
  6. 点击保存

查看索引顾问建议

Cloud SQL 会定期自动运行索引顾问分析。如需查看索引顾问建议,请使用 Query Insights 信息中心。您还可以将索引顾问建议作为表来查看和查询,也可以随时请求获得按需分析和报告。

在 Query Insights 信息中心内查看和过滤建议

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击 Query Insights
  4. 索引顾问建议会显示在热门查询和标记部分的建议列中。
  5. 可选:如需仅查看具有 CREATE INDEX 建议的查询,请为建议:创建索引添加过滤条件。

查看针对查询的建议

如需查看针对特定查询的索引建议,请按照以下步骤操作:

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击 Query Insights
  4. 热门查询和标记部分中,点击查询
  5. 如需获取查询的建议详细信息,请执行以下操作之一:
    • 点击某个查询以详细了解针对所选查询的建议,包括以下信息:
      • 性能影响(高、中、低):创建所有建议索引后的估算查询速度。
      • 建议:创建索引建议。
      • 受影响的表:创建索引时将受到影响的表的数量。
      • 所需的额外估算存储空间:创建所有建议索引所需的估算存储空间大小。
      • 受影响的查询数量:工作负载中受索引建议影响的查询总数。一个索引可能使多个查询受益。
    • 针对特定查询点击创建索引以了解有关创建索引以提高查询性能的详细建议。

以数据库表格视图的形式查看建议

您可以通过每个数据库中的以下表视图来读取其结果:

  • google_db_advisor_recommended_indexes:列出适用于每个数据库的任何建议的新索引。它还包含每个索引所需的存储空间估算值,以及每个索引可能影响的查询数量。

  • google_db_advisor_workload_report:列出顾问为其建议一个或多个新索引的每个查询。每行会汇总适用于相关查询的建议。

例如,如需查看最新索引建议分析的结果(格式设置为表),请运行以下查询:

SELECT * FROM google_db_advisor_recommended_indexes;

如果索引顾问的最新分析未找到建议,则此查询会返回不包含行的表。

由于所有这些报告都作为普通数据库视图存在,因此您可以编写过滤或显示此信息的查询。例如,如需查看将建议索引与其完整关联查询配对的报告,请针对其各自的 query_id 列联接 google_db_advisor_workload_reportgoogle_db_advisor_workload_statements 视图:

SELECT DISTINCT recommended_indexes, query
FROM google_db_advisor_workload_report r, google_db_advisor_workload_statements s
WHERE r.query_id = s.query_id;

手动请求索引分析

您可以请求 Cloud SQL for PostgreSQL 立即运行分析并显示其报告,而不是等待索引顾问的下一次计划分析。对于 Cloud SQL for PostgreSQL,您在启用索引顾问后至少需要等待 15 分钟才能运行手动分析。为此,请运行以下 SQL 函数:

SELECT * FROM google_db_advisor_recommend_indexes();

分析完成后,Cloud SQL for PostgreSQL 会显示表格式的报告,其中包含任何建议索引的说明和预估存储空间需求。如果分析未找到要建议的新索引,则视图不包含任何行。

请注意,运行此命令的用户角色可能会影响显示的建议。Cloud SQL for PostgreSQL 会将其显示限制为基于当前数据库用户发出的查询的索引建议。

创建建议索引

您可以在 Query Insights 信息中心或数据库表格视图中创建建议的索引。

如需使用 Query Insights 信息中心创建建议的索引,请执行以下操作:

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击 Query Insights
  4. 主要维度(按数据库负载)表中,点击查询
  5. 针对特定查询点击创建索引
  6. 点击复制所有索引命令。系统会将 CREATE INDEX 命令复制到剪贴板。
  7. 通过命令行连接到主实例。
  8. 如需创建建议索引,请运行复制到剪贴板的命令,例如:

    CREATE INDEX ON "public"."demo_order" ("customer_id");

google_db_advisor_recommended_indexes 视图的 index 列在每一行中都包含一个完整的 PostgreSQL CREATE INDEX DDL 语句,用于生成该行中建议的索引。

如需应用该行的建议,请完全按照所示运行该 DDL 语句。这包括将其复制到剪贴板并将其粘贴到 psql 提示符中。

例如,请考虑使用上一部分中介绍的查询手动运行分析所得到的以下输出:

                    index                   | estimated_storage_size_in_mb
--------------------------------------------+------------------------------
 CREATE INDEX ON "School"."Students"("age") |                            3
(1 row)

此报告包含单个建议:在 School 架构的 Students 表中的 age 列上添加单列索引。如需应用此建议,请输入报告中表示的 DDL 查询:

CREATE INDEX ON "School"."Students"("age");

查看受影响的查询

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击 Query Insights
  4. 主要维度(按数据库负载)表中,点击查询
  5. 针对特定查询点击创建索引
  6. 点击显示受影响的查询
  7. 点击某个查询即可详细了解受影响的查询。

查看索引顾问跟踪的查询

google_db_advisor_workload_statements 视图包含索引顾问跟踪的所有查询的列表以及每个查询的重要元数据,例如以下指标:

  • 实例执行每个查询的次数
  • 实例处理这些查询所用的总时间
  • 运行这些查询的数据库用户的 ID

清除索引顾问跟踪的查询

您可以通过清除跟踪的查询来重置实例上的索引顾问行为。为此,请运行以下 SQL 函数:

SELECT google_db_advisor_reset();

Cloud SQL for PostgreSQL 会立即清空索引顾问的跟踪查询集合。

后续步骤