本页面介绍 Cloud SQL for PostgreSQL 索引顾问,以及如何查看和应用其索引建议。
Cloud SQL for PostgreSQL 提供索引顾问,用于跟踪您的数据库处理的查询。它会定期分析这些查询,以建议可提高查询性能的新索引。
您可以将索引顾问的建议作为表来查看和查询,也可以随时请求按需分析和报告。
启用索引顾问建议
如需启用索引顾问建议,请设置 Gemini in Databases。
停用索引顾问建议
如需停用索引顾问建议,请从 Cloud SQL for PostgreSQL 实例中移除cloudsql.enable_index_advisor
标志。如需详细了解如何从实例中移除标志,请参阅配置数据库标志。
查看索引顾问的建议
Cloud SQL for PostgreSQL 会定期自动运行索引顾问的分析。
您可以通过每个数据库中的以下表视图来读取其结果:
google_db_advisor_recommended_indexes
:列出适用于每个数据库的任何建议的新索引。它还包含每个索引所需的存储空间估算值,以及每个索引可能影响的查询数量。google_db_advisor_workload_report
:列出顾问为其建议一个或多个新索引的每个查询。每行会汇总适用于相关查询的建议。
例如,如需查看最新索引建议分析的结果(格式设置为表),请运行以下查询:
SELECT * FROM google_db_advisor_recommended_indexes;
如果索引顾问的最新分析未找到建议,则此查询会返回不包含行的表。
由于所有这些报告都作为普通数据库视图存在,因此您可以编写过滤或显示此信息的查询。例如,如需查看将建议索引与其完整关联查询配对的报告,请针对其各自的 query_id
列联接 google_db_advisor_workload_report
和 google_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 会将其显示限制为基于当前数据库用户发出的查询的索引建议。
应用索引顾问的建议
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");
查看索引顾问跟踪的查询
google_db_advisor_workload_statements
视图包含索引顾问跟踪的所有查询的列表以及每个查询的重要元数据,例如以下指标:
- 实例执行每个查询的次数
- 实例处理这些查询所用的总时间
- 运行这些查询的数据库用户的 ID
清除索引顾问跟踪的查询
您可以通过清除跟踪的查询来重置实例上的索引顾问行为。为此,请运行以下 SQL 函数:
SELECT google_db_advisor_reset();
Cloud SQL for PostgreSQL 会立即清空索引顾问的跟踪查询集合。