[问题澄清]
Txn(Mvcc(TxnLockNotFound { start_ts: 409948766518378505, commit_ts: 409948768943210513, key: [109, 68, 68, 76, 74, 111, 98, 72, 255, 105, 255, 115, 116, 111, 114, 121, 0, 255, 0, 0, 252, 0, 0, 0, 0, 0, 255, 0, 0, 72, 0, 0, 0, 0, 0, 250] }
[原因分析]
-
行数据可能存在热点更新问题 ,大量并发导致 lock 被清理
-
事务提交的慢了,超过了 TTL 被其他事务给 Rollback 掉了。
-
小事务 ttl 默认是 3s
-
通过 key 查对应的行可以用 https://github.com/disksing/mok
[确认方法]
-
查看提交间隔:./pd-ctl tso [start_ts] & ./pd-ctl tso [commit_ts] 是否太久
-
根据报错信息查找对应的 SQL 信息,确认是否是 SQL 执行时间太久,对问题 SQL 进行优化
[解决思路]
-
从业务入手,消除业务热点更新问题
-
改用悲观事物模型并且使用显示事物进行数据行更新,这是因为在悲观事物模型下,隐式事物也是会使用乐观事物模型进行数据更新。