现在,我阅读了有关“ Transaction ID Wraparound”的文档,但是我确实不了解某些内容,该文档为以下网址 http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html#VACUUM-FOR-WRAPAROUND
23.1.4。防止事务ID绕回失败
PostgreSQL的MVCC事务语义取决于能否比较事务ID(XID)编号:插入XID大于当前事务XID的行版本是“将来的”,并且对当前事务不可见。但是,由于事务ID的大小有限(32位),因此运行时间较长(超过40亿个事务)的群集将遭受事务ID环绕:XID计数器环绕为零,并且所有突然出现的交易过去似乎是未来-这意味着它们的输出将变得不可见。简而言之,灾难性的数据丢失。(实际上,数据仍然存在,但是如果您不能获得它,那真是令人感到安慰。)为避免这种情况,有必要对每个数据库中的每个表进行至少20亿次事务清理。
我不理解以下语句:“将使事务ID发生折回:XID计数器回绕为零,过去突然出现的所有事务似乎都将在将来发生-这意味着它们的输出变得不可见”
有人可以解释吗?为什么在数据库遭受事务ID折回后,过去的事务似乎会在将来出现?简而言之,我想知道PostgreSQL在自动清除事务ID后是否会处于“数据丢失”的情况。
就我个人而言,我们可以使用txid_current()函数获取当前事务ID,该函数的输出是64位并且不会被循环。所以我认为知道xmin的元组的插入事务ID会比获得通过txid_current()函数。除了在关闭PostgreSQL Server之后将使用pg_resetxlog reset reset transaction ID之外。我对吗 ?谢谢