在不锁定表的情况下回收磁盘空间 - PostgreSQL 10

4
我在PostgreSQL数据库中有几个表格,它们经常被使用(用于插入/删除)。有时,这些表格的大小会增长到GB级别。我该如何回收这些表格的磁盘空间而不锁定它们?这些表格需要经常使用,因此我不能承受它们被锁定的风险。VACUUM FULL可以回收磁盘空间,但会锁定表格,所以我不能使用FULL选项。请问是否有其他方法?谢谢。
1个回答

4
通常您可以通过配置自动真空足够积极来避免问题,以使其跟得上变化速率。
如果这不起作用,或者您有定期的大量DELETE操作,请考虑使用类似pg_squeezepg_repack的工具。

还有一个 pgcompattable 选项,你可以在 https://stackoverflow.com/a/59223609/14731 上阅读相关信息。 - Gili
@Gili 我看了代码,不知道客户端工具怎么做到这一点。虽然这个想法很聪明(VACUUM表,然后更新行直到最后一页为空,然后依靠VACUUM截断重复执行,最后重建索引),但是这将导致表上大量的翻转和负载,因为有那些重复的UPDATES - Laurenz Albe
好的。我希望我能够在Windows上编译(更不用说运行)pg_squeezepg_repack。目前看起来似乎还没有办法... - Gili
@Gili,使用pg_squeeze应该是可行的,但在Windows上构建总是很困难。 - Laurenz Albe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接