【发布时间】:2020-06-26 15:36:32
【问题描述】:
为什么template0 DB的事务年龄增加了而从未使用过?
datname | age |
----------------------+-----------+
template0 | 192232070
【问题讨论】:
标签: postgresql postgresql-11 postgresql-12 enterprisedb
为什么template0 DB的事务年龄增加了而从未使用过?
datname | age |
----------------------+-----------+
template0 | 192232070
【问题讨论】:
标签: postgresql postgresql-11 postgresql-12 enterprisedb
每个数据库在其pg_database 条目中都有一个datfrozenxid。这与数据库中所有表的pg_class 条目中的最小relfrozenxid 相同。
每当VACUUM 冻结表中的元组时,它就可以推进这些列。
没有必要定期清理template0。但是,即使在该数据库中,只要表的relfrozenxid 比autovacuum_freeze_max_age 更旧,表就会收到反环绕自动清空运行。这将很快完成:PostgreSQL 将在 可见性地图 中看到所有页面都“全部冻结”并前进relfrozenxid。
这不是真正的问题,因此没有人认为需要更改或优化它。
【讨论】:
template0, template1, postgres 中发生零事务 - 默认数据库,此值将根据用户数据库为这些数据库增长。当 autovacuum 启动时,template1 和 postgres DB 可能/将刷新此值到较低的数字,但由于 template0 仅在 autovacuum_freeze_max_age 值时自动清理,它会继续增长
datfrozenxid 对于template0 也会被推进,但你说得对,它只会在反环绕真空期间推进,这是 autovacuum 在template0 上工作的唯一时间(只是立即得出结论,无事可做)。请注意,增长的不是datfrozenxid,而是当前事务ID。