Postgresql显式VACUUM与自动VACUUM:差异?建议?

时间:2018-01-08 15:33:50

标签: postgresql vacuum autovacuum

来自PostgreSQL(相对)newb的快速提问:

我们运行一个批处理过程,作为最后一步,删除大多数以前的批次。

磁盘空间是一个问题,因此我们需要确保PostgreSQL自行清理。

除了强制PostgreSQL更快地进行垃圾收集之外,在批处理结束时显式调用VACUUM与让auto-VACUUM守护进程处理它之间有什么区别吗?是否有理由推荐一种方法而不是另一种方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

当有一个真空时它回来了,它已经充满并且阻塞了。然后PostgreSQL人员添加了非阻塞真空。但你仍然需要自己安排。

然后一些天才制作了一个守护程序,当桌子需要它时会自动为你运行真空。它使用你或我将使用的完全相同的vacuum命令,但有很多设置,特别是默认设置,使它运行得更慢,更少侵入。这些设置主要用于工作线程(默认为3),延迟成本(autovac为20ms,常规vac为0ms)和autovacuum成本延迟限制(-1,即使用系统设置为200)。

因此,定期真空是非常积极的,没有成本延迟,并且将像您的IO子系统一样快速和快速地运行。它基本上与您的常规工作负载竞争IO带宽。

一般情况下,你可以在你的情况下做两件事之一:

一:使autovacuum更具攻击性。通过将autovacuum_vacuum_cost_delay从20降低到2到5范围内的某个范围,它将运行得更快,但仍然不会太过分。

二:手动定期吸尘。由于常规真空吸尘器默认情况下没有cost_delay,因此这将是最快但也最具破坏性的。

根据使用模式等决定是你的。