我们有一个存储事件的表。这是一个仅附加表,其中包含 40 亿行/事件。我们从不删除或更新此表中的行,因此我们永远不会dead_rows
在其中。
频繁运行AUTOVACUUM可以防止AFAIK事务 id 环绕。
但是据我了解,AUTOVACUUM 永远不会在只写表上运行,因为它们中没有死行,因此它们永远不会超过autovacuum_threshold
.
在这种情况下如何防止事务 id 环绕?
我们有一个存储事件的表。这是一个仅附加表,其中包含 40 亿行/事件。我们从不删除或更新此表中的行,因此我们永远不会dead_rows
在其中。
频繁运行AUTOVACUUM可以防止AFAIK事务 id 环绕。
但是据我了解,AUTOVACUUM 永远不会在只写表上运行,因为它们中没有死行,因此它们永远不会超过autovacuum_threshold
.
在这种情况下如何防止事务 id 环绕?
By
autovacuum_multixact_freeze_max_age
,默认为 2 亿。一旦表有一个比
autovacuum_multixact_freeze_max_age
事务旧的未冻结的活动行,autovacuum 将启动一个工作程序,对表执行反环绕真空并冻结比vacuum_freeze_min_age
事务更早的行。请注意,从 PostgreSQL v13 开始,autovacuum 不仅由死元组触发,还由插入的行数触发(基于
autovacuum_vacuum_insert_threshold
和autovacuum_vacuum_insert_scale_factor
)。这允许更早地冻结行,并减少反环绕真空的影响。有关详细信息,请参阅我的博客文章。