在某些场合,并作出巨大的后update
,insert
或delete
从一个表,我已经开始了VACUUM FULL ANALYZE
,以确保DB没有得到太臃肿。在生产数据库中进行操作使我发现这不是一个好主意,因为我可能会长时间阻塞该表。因此,我取消了此过程,可能只是尝试了一下VACUUM
(未完成),或者AUTOVACUUM
稍后再做任何可以做的事情。
问题是:如果我在中途停止VACUUM或AUTOVACUUM,是否已经完成所有处理?
例如,如果VACUUM
已经找到1 M死行而我停止了,所有这些信息会丢失吗?VACUUM是否以完全事务性的方式工作(“全部或全部”,就像很多PostgreSQL进程一样)?
如果可以安全地中断VACUUM而不会丢失所有工作,那么有什么方法可以使vacuum
工作逐步进行?[工作100毫秒,停止,等待10毫秒,以便不阻塞世界其他地方...依此类推]。我知道您可以通过调整自动真空参数来完成部分操作,但是我正在考虑能够以编程方式控制此操作,以便能够在特定时间/特定条件下执行此操作。
注意:在这种情况下,停止/取消/终止进程意味着:
- 如果使用pgAdmin,请按“取消查询”按钮。
- 如果以编程方式工作,请调用pg_cancel_backend()。
我认为两者是等效的。我还没有使用过任何shell /系统级的kill命令。