Postgres维护的正确顺序
Posted
技术标签:
【中文标题】Postgres维护的正确顺序【英文标题】:Correct order of Postgres maintenance 【发布时间】:2012-07-10 23:14:31 【问题描述】:我有一张大表,因为很多行经常更新,因此索引膨胀。我也在删除大量行。
为了恢复磁盘空间,执行以下任务的正确顺序是什么?
真空,将死元组标记为空闲以供数据库重用,不返回 系统空间。 Vacuum Full,重写表减少表膨胀, 将空间返回给系统。 重新索引,重写索引减少索引 膨胀,将空间返回给系统。【问题讨论】:
【参考方案1】:从 PostgreSQL 9.0 开始,VACUUM FULL
应该以最佳方式返回磁盘空间(就像 CLUSTER 一样)。我引用了当前手册 here 中 9.0 的发行说明:
VACUUM FULL 的新实现。该命令现在重写 整个表和索引,而不是将单个行移动到 紧凑的空间。在大多数情况下,它的速度要快得多,而且不再 导致索引膨胀。
请注意,通常不需要甚至不建议运行VACUUM FULL
。如果您从数据页面中删除所有 HOT 更新等的摆动空间,它可能会减慢更新速度。
【讨论】:
是的,我知道 VACUUM FULL 被重写了,我不知道索引也被重写了。尽管如此,我的问题仍然存在,在所描述的情况下,最好的行动和执行顺序是什么? @Gothmog:为了恢复磁盘空间,就是:VACUUM FULL
或CLUSTER
。不需要其他任何东西。我会VACUUM FULL ANALYZE
以获取当前统计信息。不需要REINDEX
。通常,如果不是为了恢复磁盘空间,并且您不只是删除表的大部分内容,则应该使用VACUUM ANALYZE
。以上是关于Postgres维护的正确顺序的主要内容,如果未能解决你的问题,请参考以下文章
在Macbook上创建的Postgres DB的Ruby on Rails项目需要在Windows 10上访问
ORDER BY 中的最后一个案例执行不正确 postgres