【发布时间】:2021-07-03 18:11:44
【问题描述】:
我有一个messages 表,里面有几百万条记录。我的 Rails 应用程序在大多数页面上都包含一个查询,以计算未读 messages 的数量以显示给用户。这个查询 - 以及 messages 表的所有查询 - 没有改变,直到昨天都运行良好。
昨天,我创建了一个新的 messages 列并运行 update_all 来更新我几百万 messages 记录中的每一个的新列。很简单,我之前已经做过很多次了,尽管记录的数量较少。
但是,现在对 COUNT 或 SELECT messages 的每个查询都需要 30 多秒才能返回。在迁移和update_all 之前,执行 COUNT 或 SELECT 只需要 100 毫秒左右。
我尝试了很多方法,但查询仍然非常慢。我试过REINDEX messages,也试过VACCUM messages,但都没有显着帮助。
其余的数据库表仍然照常工作,但是messages 表的这个问题使所有内容都在爬行。有没有人知道为什么会发生这种情况,还有什么我可以尝试解决的问题?
【问题讨论】:
-
如果没有
EXPLAIN (ANALYZE, BUFFERS)输出,很难确定。
标签: sql postgresql count postgresql-9.6 postgresql-performance