[FAQ] tikv aborts txn: Txn(Mvcc(PessimisticLockNotFound

[问题澄清]

ERROR 1105 (HY000): tikv aborts txn: Txn(Mvcc(PessimisticLockNotFound { start_ts: 411067607187980289,key: [116, 128, 0, 0, 0, 0, 0, 1, 123, 95, 114, 128, 0, 0, 0, 0, 6, 205, 74] }))

[原因分析]

悲观锁事务会遇到该类报错,事务开始执行时上锁,达到 [pessimistic-txn] 部分的 ttl 后锁被释放。 ttl 是悲观事务的锁超时时间,默认值 30 秒,可以在 15 秒到 120 秒之间配置,超出这个范围会报错。如果事务的执行时间超过了 ttl,事务会失败。设置过大,会存在 tidb-server 宕机时,残留的悲观锁长时间阻塞写的问题,设置的过小,会存在事务来不及执行完,就被其他事务 rollback 的问题。

[解决方案]

这一机制在 3.0.6 or 3.0.7 会调整:
1. ttl 会固定在 20s,不能调整
2. txn heartbeat 会自动更新事务的 ttl,保证第二个事务不会将第一个事务的锁清理掉,模拟类似 MySQL 的行为
3. 理论上不再会看到这个报错

4.0.8还有报这个错,是异常吗?