gpt4 book ai didi

postgresql - 为什么 PostgreSQL 性能在 VACUUM FULL 之后没有恢复到最大值?

转载 作者:行者123 更新时间:2023-11-29 12:34:25 24 4
gpt4 key购买 nike

我有一个包含几百万个元组的表。

我对其中的大部分进行更新。

第一次更新大约需要一分钟。第二个,需要两分钟。第三次更新需要四分钟。

之后,我执行 VACUUM FULL。

然后,我再次执行更新,这需要两分钟。

如果我转储数据库并重新创建它,第一次更新将需要一分钟。

为什么 PostgreSQL 性能在 VACUUM FULL 后没有恢复到最大值?

最佳答案

VACUUM FULL 不压缩索引。事实上,索引在执行 VACUUM FULL 后可能会变得更糟。在 VACUUM FULL 之后,您应该重新索引表。

但是,VACUUM FULL+REINDEX 相当慢。您可以使用 CLUSTER 命令实现与压缩表和索引相同的效果,这只需要花费一小部分时间。它有一个额外的好处,它会根据您选择的 CLUSTER 索引对您的表进行排序。这可以提高查询性能。 CLUSTER 相对于 VACUUM FULL+REINDEX 的缺点是它在运行时需要大约两倍的磁盘空间。此外,如果您运行的版本低于 8.3,请务必小心使用此命令。它不是 MVCC 安全的,您可能会丢失数据。

此外,您可以执行空操作 ALTER TABLE ... ALTER COLUMN 语句来摆脱表和索引膨胀,这是最快的解决方案。

最后,任何 VACUUM FULL 问题还应该说明您为什么需要这样做?这几乎总是由不正确的吸尘引起的。您应该运行 autovacuum 并正确调整它,这样您就不必运行 VACUUM FULL。

关于postgresql - 为什么 PostgreSQL 性能在 VACUUM FULL 之后没有恢复到最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3140398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com