数据库性能建议(由 Azure PSQL 提供)

您好,

我们基于 Azure 的“Azure Database for PostgreSQL”实例托管我们的 Discourse 论坛。该服务的一个优势是能够根据“数据库特征”和使用情况提供性能建议

自从迁移到 Azure 后,我们收到了一些关于缺失索引和可能冗余索引的提示,想与大家分享。

在创建这些缺失的索引后,我们观察到整体性能有轻微(幅度不大)的提升,但我们无法应用 DROP INDEX 建议,因为这可能会破坏即将进行的更新或数据库迁移。无论如何,我们无法确定这些索引是否可以安全删除,或者删除后是否会对性能产生负面影响。

以下是 Azure 建议我们创建的索引(影响程度为“低”和“中等”):
create-indexes.csv (1.5 KB)

以下是针对“已覆盖”索引的建议:

摘要

删除表 public.optimized_images 上的索引 index_optimized_images_on_upload_id
原因:该索引已被 index_optimized_images_on_upload_id_and_width_and_height 覆盖。

删除表 public.post_revisions 上的索引 index_post_revisions_on_post_id
原因:该索引已被 index_post_revisions_on_post_id_and_number 覆盖。

删除表 public.post_timings 上的索引 post_timings_summary
原因:该索引已被 post_timings_unique 覆盖。

删除表 public.topic_links 上的索引 index_topic_links_on_topic_id
原因:该索引已被 unique_post_links 覆盖。

删除表 public.post_uploads 上的索引 index_post_uploads_on_post_id
原因:该索引已被 idx_unique_post_uploads 覆盖。

对于上述“删除”建议,建议您谨慎对待。我们认为这主要影响的是数据库总体大小,而非提升性能。例如:我们的整个数据库约为 120GB,而所有这些建议释放的空间仅为 422MB。Azure 本身也将影响定义为“低”。因此,这似乎仅仅是一次清理操作。

如上所述,我分享这些信息是希望它能帮助您在性能调优方面略作改进。除了这些索引外,在我们使用 Azure 服务期间,Azure 未提供其他任何建议。

此致
Sascha

8 个赞

感谢分享,其中一些建议有点奇怪……

CREATE INDEX index_topics_on_category_id ON public.topics USING btree (category_id)
CREATE INDEX index_topics_on_category_id_and_id ON public.topics USING btree (category_id, id)
CREATE INDEX index_topics_on_id_and_category_id ON public.topics USING btree (category_id, id)

它建议的这种重复三次的索引选择性极低。这类索引的问题在于,查询规划器通常会正确地忽略它们。如果只有 10 个不同的值,你需要将其与其他字段(例如 topic_id)组合使用。

至于未使用的索引,大约六个月前,我们曾对数据库进行统计分析,查找基础设施中未使用的索引。我们确实删除了几个,但这个帖子提醒我们,有必要再次执行这一流程。

感谢发布此内容。

4 个赞

感谢您的回复并指出这三个索引。我此前并未注意到这个三重重复,因为这些建议并非一次性出现,而是我在数周内分步应用的。
即使它们没有出现在 DROP 建议中,这也相当奇怪。看来 Azure 还有一些工作要做 :smiley:(我不得不将那些建议检查两遍)。

此致
敬礼

1 个赞