GBase 8c
其他
文章

GBase 8c 教程 (十八)防止事务ID回滚失败

发表于2023-12-12 11:11:1735次浏览0个评论

GBase 8c数据库的MVCC事务依赖于对事务ID(XID)的比较:如果一个插入事务的XID大于当前事务的XID,则插入操作就是属于“未来的”操作,对当前事务不可见。但是由于当前最大可支持事务数40亿,一旦超出40亿,则XID从0开始重新计数。如果一个长事务超过40亿事务数的时间,则本来属于过去的事务会突然变成未来事务,会导致灾难性的数据丢失。

为了避免这种情况发生,需要至少在每20亿事务清理数据库中的所有表。

为了跟踪一个数据库中最老的未冻结XID的年龄,VACUUM在系统表pg_class和pg_database中存储XID的统计信息:

  • 表pg_class的relfrozenxid列包含上一次全表VACUUM所用的冻结截止XID;

  • 表pg_database的datfrozenxid列是出现在该数据库中的未冻结XID的最小值。

评论

登录后才可以发表评论