【发布时间】:2022-12-01 17:25:00
【问题描述】:
我目前遇到一个问题,试图删除某些行的事务只是挂起。我找到了行,其中 xmax 值设置为该事务 ID。有趣的是,有几行 xmax 低于 xmin。此外,上述 xmax 值是在 xmin 大于与上述事务关联的 backend_xmin 值的行上设置的。我将非常感谢提示或解释,为什么 xmin 大于 xmax。
我的数据摘录如下
tableoid cmax xmax cmin xmin ctid id
15979773 1 1838047967 1 1838054693 (10508,58) 391992038
15979773 1 1838047967 1 1838071633 (10525,48) 391833021
15979773 1 1838047967 1 1838075176 (10548,9) 391294625
15979773 1 1838047967 1 1838075891 (10543,28) 391590003
15979773 1 1838047967 1 1838076423 (10539,37) 391871511
15979773 1 1838047967 1 1838076905 (10539,39) 392007013
15979773 1 1838047967 1 1838078116 (10543,47) 391833029
15979773 1 1838047967 1 1838078121 (10540,56) 391855133
15979773 1 1838047967 1 1838078123 (10541,54) 391867004
15979773 1 1838047967 1 1838078125 (10550,27) 391503024
xmax 中的事务状态为:
SELECT pg_xact_status (xid8 '1838047967');
in progress
xid 地址还没有被环绕,因为在开始新事务后它的 xid 大于上面的值:
begin;
SELECT * FROM txid_current();
end;
commit;
1848210508
不幸的是我不能使用 pageinspect
我运行的 Postres 版本是14.3
【问题讨论】:
-
这是什么版本?您是通过 pageinspect 之类的东西看到的,还是只是在普通的可见表行中看到的?您的系统是否足够旧以致于已经或接近环绕 xid 地址?你能告诉我们你实际看到了什么吗?
标签: postgresql