[FAQ] Txn(Mvcc(TxnLockNotFound

[问题澄清]

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 进行优化

[解决思路]

  • 从业务入手,消除业务热点更新问题

  • 改用悲观事物模型并且使用显示事物进行数据行更新,这是因为在悲观事物模型下,隐式事物也是会使用乐观事物模型进行数据更新。