使用antdb数据库时,显示“ERROR: attempted to local committed but global uncommitted transaction, which version is 1749254057 \N wait session last xid commit time out, which version is 1963201898 \N”。

0 denude 1年前 310次点击

求助,使用antdb数据库时,显示“ERROR: attempted to local committed but global uncommitted transaction, which version is 1749254057 \N wait session last xid commit time out, which version is 1963201898 \N”该怎么解决?

共 1 条评论
hadi 1年前
0 

解决方式

该错误出现在CN节点执行SQL操作时;
在报错的CN节点查询adb_snap_state()扩展试图:
select * from adb_snap_state();
--如果提示不存在则在对应的数据库下创建该插件即可:create extension if not exits adb_snap_state;
检查报错的事务ID号是否位于查询结果的xid_assign: []集合中,如果集合中有,则在对应的CN节点执行如下操作:
找到CN进程下的postgres: snapshot receiver process进程号,并尝试kill -15 该进程号(注意:一定要是kill -15不可以-9或者其他),执行完成即可。

正常情况下通过kill -15方式触发事务手工同步即可解决问题,当采用该手段未解决问题时,可以采用如下方式继续处理:
登录GTMC节点,找到gxid sender的数据库进程(譬如进程号是:30099)
窗口一:
通过gdb命令进行如下操作:
gdb -p 30099
handle SIGUSR1 nostop noprint --键入如上命令并回车
b gxidsender.c:140 --键入如上命令并回车
command 1 --键入如上命令并回车
p GxidSender ->xcnt=0 --键入如上命令并回车
c --键入如上命令并回车
end --键入如上命令并回车

窗口二:
此时新开一个终端窗口执行命令kill -15 30099(gxid sender进程号)后继续切换到窗口一执行c命令
窗口一:
c --键入如上命令并回车

通过如上方式强制解决GTMC和CN事务状态不同步的问题;

原因说明

产生该错误的原因可能是CN节点和GC节点事务号未及时同步导致的,可以手工进行同步;

添加一条新评论

登录后可以发表评论 去登录