我有一个Postgres 11数据库。该数据库有逻辑转储(REPLICA using streaming replication)如果我有一些表,其中的信息被插入,但没有被修改,那么通常的自动真空将不会被触发,因为不会有死的元组。而且肯定的是,在这个表中会有由年龄触发的自动真空冻结(relfrozenxid)〉当前设置('vacuum_freeze_table_age').但是为什么有时候自动真空防止绕回是开着的?自动真空不能及时冻结?也许不能得到特殊的锁定?原因是什么?还有一个问题.自动真空冻结和自动真空冻结有什么区别(这是由vacuum_freeze_table_age触发的)和autovacuum来防止绕回?我知道即使关闭了vacuum,它也会启动。但还有什么呢?它对表有特殊的锁?或者可能它比以前的vacuum做得更多?
1条答案
按热度按时间vhipe2zx1#
如果您升级到PostgreSQL v13或更高版本,自动真空也将由插入触发,这将使防缠绕自动真空在出现时运行更轻松。
如果表中有一个未冻结的行的时间超过
vacuum_freeze_table_age
,则会触发反绕回自动抽真空,这与我们所说的“自动抽真空冻结”是一样的:行被冻结以避免重用事务ID的问题。2您看到的是自动真空运行“以防止绕回”。3这是完全正常的,没有什么可担心的。这种所谓的“侵略性”自动吸尘器与普通自动吸尘器的区别在于
CREATE INDEX
、TRUNCATE
、ALTER TABLE
等获取的锁,则它不会后退。除此之外,一切如常;表上的
INSERT
、UPDATE
和DELETE
语句不被阻塞。