云数据库 RDS-AutoVacuum介绍和调优:事务ID回卷

时间:2024-12-20 17:08:41

事务ID回卷

PostgreSQL会为事务分配一个事务ID,这个事务ID并不是无限大的,PostgreSQL使用一个32位的整数作为事务ID的值,其使用1到2^31轮转的方式来处理无限多的事务,也就是说,当事务ID到达2^31(2147483648)的时候,它将为接下来的事务继续分配1到2^31的事务ID,这种轮转事务ID的方法就是事务ID回卷。

当前的事务ID只能看到其之前的事务ID提交信息,如果当前一个事务ID是100, 当该事务ID达到最大值2^31之后会进行轮转,这样从101到2^31对于当该事务ID来说都是之后的事务ID,此时该事务ID不能看到100以后的所有事务,这样就会导致数据库数据丢失,会造成数据库的不可信。

vacuum freeze可以用来防止事务ID回卷,其意味着覆盖事务ID到frozen事务ID,上面的例子,当前的事务ID100是经历过回卷的,但是使用vacuum freeze将表中对应元组的xmax的值设置为2,那这样所有的事务都能看到该元组。

vacuum freeze同时也会清理死元组。

support.huaweicloud.com/usermanual-rds/rds_pg_08_00015.html