我需要对表中的所有行执行简单更新。该表有 40-50 百万行。在结果期间删除索引和约束会UPDATE
导致性能大幅提升。
但是自动真空呢?autovacuum 可以启动 aVACUUM
或ANALYZE
在 a 中间启动UPDATE
吗?如果是这样,那将是消耗机器资源的无用工作。我可以在之前在桌子上禁用它,然后在UPDATE
之后重新启用它:
ALTER TABLE my_table
SET (autovacuum_enabled = false, toast.autovacuum_enabled = false);
-- Drop constraints, drop indexes, and disable unnecessary triggers
UPDATE my_table SET ....;
-- Restore constraints, indexes, and triggers
ALTER TABLE my_table
SET (autovacuum_enabled = true, toast.autovacuum_enabled = true);
如果我在第一次之后不提交,这是否有效ALTER
?
另外,如果我在 期间禁用它,它会在更新后UPDATE
触发,还是会因为在更新期间被禁用而忽略这些更新?(我怀疑它会运行,但我宁愿确定。)
我现在正在使用 PG 9.3,但应该很快就会升级。因此,任何提及新版本中的更改都值得赞赏。
不
根本没有意义。
autovacuum
不会清除正在运行的事务中锁定的任何行。所以autovacuum
但是,它不会以我所知道的任何有意义的方式阻止或减慢更新。