来自 PostgreSQL(相对)新手的快速问题:
我们运行一个批处理,作为其最后一步,删除大部分以前的批处理。
磁盘空间是一个问题,因此我们需要确保 PostgreSQL 自行清理。
除了强制 PostgreSQL 更快地进行垃圾收集之外,在批处理结束时显式调用 VACUUM 与让 auto-VACUUM 守护进程处理它之间有什么区别吗?有什么理由推荐一种方法而不是另一种方法吗?
谢谢!
来自 PostgreSQL(相对)新手的快速问题:
我们运行一个批处理,作为其最后一步,删除大部分以前的批处理。
磁盘空间是一个问题,因此我们需要确保 PostgreSQL 自行清理。
除了强制 PostgreSQL 更快地进行垃圾收集之外,在批处理结束时显式调用 VACUUM 与让 auto-VACUUM 守护进程处理它之间有什么区别吗?有什么理由推荐一种方法而不是另一种方法吗?
谢谢!
回去的时候有一个真空,它是满的和阻塞的。然后 PostgreSQL 家伙添加了非阻塞真空。但是您仍然必须自己安排。
然后一些天才制作了一个守护进程,当桌子需要它时,它会自动为你运行真空。它使用与您或我将使用的完全相同的真空命令,但有很多设置,尤其是默认设置,使其运行速度更慢且干扰更少。这些设置主要用于工作线程(默认 3)、延迟成本(autovac 为 20 毫秒,常规 vac 为 0 毫秒)和 autovacuum 成本延迟限制(-1,即使用系统设置,即 200)。
因此,常规的vacuum 非常激进,没有成本延迟,并且会在您的IO 子系统允许的情况下尽可能快地运行。它基本上与您的常规工作负载竞争 IO 带宽。
通常,您可以根据自己的情况做以下两件事之一:
一:让autovacuum更具侵略性。通过将 autovacuum_vacuum_cost_delay 从 20 降低到 2 到 5 范围内的某个值,它会运行得更快,但仍然不会妨碍太多。
二:手动运行常规真空吸尘器。由于默认情况下常规真空吸尘器没有 cost_delay,这将是最快的,但也是最具破坏性的。
根据使用模式等做出决定。