【问题标题】:why does the transaction age of template0 DB increase in postgresql为什么postgresql中template0 DB的事务年龄增加
【发布时间】:2020-06-26 15:36:32
【问题描述】:

为什么template0 DB的事务年龄增加了而从未使用过?

   datname        |    age    | 
 ----------------------+-----------+
  template0            | 192232070

【问题讨论】:

    标签: postgresql postgresql-11 postgresql-12 enterprisedb


    【解决方案1】:

    每个数据库在其pg_database 条目中都有一个datfrozenxid。这与数据库中所有表的pg_class 条目中的最小relfrozenxid 相同。

    每当VACUUM 冻结表中的元组时,它就可以推进这些列。

    没有必要定期清理template0。但是,即使在该数据库中,只要表的relfrozenxid 比autovacuum_freeze_max_age 更旧,表就会收到反环绕自动清空运行。这将很快完成:PostgreSQL 将在 可见性地图 中看到所有页面都“全部冻结”并前进relfrozenxid。

    这不是真正的问题,因此没有人认为需要更改或优化它。

    【讨论】:

    • 谢谢你。有点解释它,但当它用于 template0 时却相当具有欺骗性。如果这里有错误,请纠正我,因此理想情况下,无论数据库template0, template1, postgres 中发生零事务 - 默认数据库,此值将根据用户数据库为这些数据库增长。当 autovacuum 启动时,template1 和 postgres DB 可能/将刷新此值到较低的数字,但由于 template0 仅在 autovacuum_freeze_max_age 值时自动清理,它会继续增长
    • datfrozenxid 对于template0 也会被推进,但你说得对,它只会在反环绕真空期间推进,这是 autovacuum 在template0 上工作的唯一时间(只是立即得出结论,无事可做)。请注意,增长的不是datfrozenxid,而是当前事务ID。
    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2023-01-29
    相关资源
    最近更新 更多