如何稳定 PostgreSQL 中频繁更新的表的性能

m5b*_*5ba 6 postgresql performance

我正在尝试找到一种方法来防止 PostgreSQL 数据库性能下降。

该表每分钟更新 100,000 - 200,000 INSERTs。每 5 分钟该表就会更新一次,并使用相同规模的聚合UPDATE和多个DELETEs. 聚合的DELETEs方式是将表的大小保持在 1000 万条记录左右。

显然更新太频繁所以AUTO VACUUM无法完成。VACUUM我开始在每个系列赛后跑步DELETE。这大大改善了行为。

我怀疑定期重新索引会有所帮助,但尚未验证。实际上,非常可疑的是 PostgreSQL 有专门的重建索引命令。

我使用了不同的fillfactor索引,没有明显的差异。

为了保持性能稳定,我还应该考虑什么?假设随着时间的推移缓慢但稳定比有时很快有时很慢要好。

UPD:每次删除后进行真空分析+每 6 小时重新索引解决了该问题。

Chr*_*ers 2

有些事情取决于您的 PostgreSQL 版本。在某些旧版本上,请注意 fsm 设置,以确保它可以跟踪表中的可用空间以供重复使用。如果您可以承受停机时间,您还可以考虑安排定期集群。如果没有,请注意索引。