joa*_*olo 14 postgresql maintenance vacuum autovacuum
在某些场合,并作出巨大的后update
,insert
或delete
从一个表,我已经开始了VACUUM FULL ANALYZE
,以确保DB没有得到太臃肿。在生产数据库中做这件事让我发现这不是一个好主意,因为我可能会阻塞表很长一段时间。所以,我取消了这个过程,也许只是尝试了VACUUM
(不是完整的)或者让AUTOVACUUM
以后做任何它可以做的事情。
问题是:如果我在“中途”停止 VACUUM 或 AUTOVACUUM,是否所有已经完成的处理都丢失了?
例如,如果VACUUM
已经找到 1 M 个死行并且我停止它,那么所有这些信息都丢失了吗?VACUUM 是否以完全事务的方式工作(“全有或全无”,就像大量的 PostgreSQL 进程一样)?
如果可以安全地中断 VACUUM 而不会丢失所有工作,那么有什么方法可以vacuum
增量工作吗?[工作 100 毫秒,停止,等待 10 毫秒以允许非阻塞世界其他地方......等等]。我知道您可以通过调整 autovacuum 参数来完成部分工作,但我正在考虑能够以编程方式控制这一点,以便能够在某些时间/在某些条件下执行此操作。
注意:在这种情况下,停止/取消/终止进程意味着:
我假设两者是等价的。我没有使用任何 shell/系统级 kill 命令。
jja*_*nes 10
由中断的 VACUUM FULL 完成的工作将完全丢失,因为它将简单地恢复到使用表格的先前版本并丢弃表格的进行中版本。
由常规(非完整)VACUUM 完成的工作可能不会完全丢失。分批清洗索引,完全清洗的批次不需要再次清洗。它们仍然需要再次检查,但下次会发现它们已经干净了。因此,您可能会节省一些不需要重复的写入 IO。
归档时间: |
|
查看次数: |
20125 次 |
最近记录: |