批量更新数据死锁

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】6.5.1
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

执行update语句失败,如何排除死锁

unexpected resolve err: commit_ts_expired:<start_ts:443481858696045745 attempted_commit_ts:443481858696070679 key:“t\200\000\000\000\000\000\002j_r\200\000\000\000\003\314Q\264” min_commit_ts:443481864372486146 > , lock: key: 74800000000000026a5f728000000003cc51b4, primary: 74800000000000021d5f698000000000000001013838373434303432ff3039373535303535ff3938000000000000f9, txnStartTS: 443481858696045745, lockForUpdateTS:443481858696054340, minCommitTs:443481864372486146, ttl: 44600, type: Put, UseAsyncCommit: t

1、首先应该排查为什么会有锁的出现,能不能从业务逻辑设计上就避免锁的出现?如果能那是最好;
2、其次,更新之前在业务逻辑代码上进行锁控制,后拿到锁的等待或者设置重试等;
3、最后,批量更新不宜设置太大的数据量,不仅易造成锁问题,而且容易造成OOM,主键相同的数据尽可能划分到同一个批次里更新。

select * from information_schema.data_lock_waits
当时通过查询没有看到和这次更新相关的锁,并且更新数据条数不是很多大概6k条左右 :upside_down_face:

逻辑问题,不能避免

查sql逻辑,把数据库累倒了。。。

调整事务里获取锁的顺序

select * from information_schema.data_lock_waits