事务卡在LockWaiting无响应

【 TiDB 使用环境】

【TiDB 版本】 5.3.0

在事务内执行一个update的操作,更新几千条数据,事务长时间卡在LockWaiting状态无响应,查看DATA_LOCK_WAITS表(如下图),发现事务申请的锁被另一个事务持有,但是查看CLUSTER_TIDB_TRX表并没有那个事务,请问一下这是什么情况?为什么锁会被一个不存在或者已经完成的事务持有?

【附件】


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

1 个赞

用什么用户查询的这个视图?

仅拥有 PROCESS 权限的用户可以获取该表中的完整信息。没有 PROCESS 权限的用户则只能查询到当前用户所执行的事务的信息。

试试在每个tidb sever用tidb_trx能看到不

1 个赞

肯定是有阻塞的

1 个赞

查询是否有ddl在执行

按说不会长时间等待吧,一般都有超时回滚的。

记得Oracle和MySQL都有死锁侦测功能的,侦测到死锁,就回滚一个事务,避免长时间等待的。

TiDB应该也有侦测,但是还是会有一个时差的,可以在视图里查看锁信息

3 个赞

root用户

CLUSTER_TIDB_TRX表里不是集群所有的事务吗?

1 个赞

超时回滚也没有work啊,遇到过好几次了,我们都是把客户端进程kill掉了,事务还在那卡着,最后手动kill掉的。

1 个赞

cluster_tidb_trx是从其他节点获取事务信息,通过每个tidb server 查tidb_trx可以判断下cluster表获取是否有问题

1 个赞