我正在运行 PG 8.4
我有一张大约有 20K 条记录的表。任何使用超过 1 条记录(例如连接)访问此表的查询都会非常非常慢。即使计数也需要 20 秒。
统计数据显示有 500 万个 live_tuple。
我尝试了 vacuum、vacuum analyze,最后,vacuum full。速度方面没有任何变化。统计数据仍然显示同样的事情。
我最终创建了一个新表,将所有记录插入新表并删除/重命名旧表。
新表现在运行得快如闪电。
任何想法:
1)更正确的处理方法是什么?我正在寻找一种更好的方法来执行此操作,因为副作用之一是指向表的视图已被“alter table rename to”语句修改,而我不知道,这些视图指向旧的表2天!
2)为什么首先会发生这种情况?
1)我会尝试集群然后分析。我唯一的犹豫是我不能 100% 确定这里发生了什么。是否也有一些索引损坏?Reindex 可能有帮助?鉴于统计条目偏离了轨道,是否有可能在其他地方关于关系的 OID 发生了损坏?
2)我不知道。我以前从未见过这样的事情。我什至需要更多的诊断信息来冒险猜测。例如,如果再次发生这种情况,则有必要了解桌子的物理尺寸。
编辑:记住 8.4 仍然有 max_fsm_pages,如果它在 vacuum 之间设置得太低可能会导致这种表膨胀。
Edit2:Vacuum full,但是应该能够处理由于 max_fsm_pages 而导致的膨胀,至少根据我的经验,它确实如此,再次向我暗示更深层次的错误。
我想我终于找到了 1) 更正确的处理方式的答案?