[问题澄清]
Error 9007: Write conflict, txnStartTS=412918538400432230, conflictStartTS=412918538413539396, conflictCommitTS=412918538413539396, key={tableID=14999, indexID=1, indexValues={1000001606, 10,}} primary={tableID=14999, indexID=1, indexValues={1000001606, }} [try again later]
[原因分析]
写写冲突的时候在日志中会出现该类报错,其中各个字段的解读如下:
-
txnStartTS:本事务的 StartTS
-
conflictStartTS:冲突事务的 StartTS
-
conflictCommitTS:冲突事务的 CommitTS
-
key={tableID=14999, indexID=2, indexValues={1000001606, 10,}} :本事务中,冲突的数据,indexID 表示冲突的是索引数据,indexValues表示索引的列值,最后的 10 是 索引对应的 handle
-
primary={tableID=14999, indexID=4, indexValues={1879832947,10, }}:本事务的 primary key
[解决方案]
集群压力过大也可能出现(3.0.0 有 bug 导致conflictCommitTS = 0),可以通过以下监控项来定位是否是事务冲突导致的:
-
TiDB 面板中 kv retry
-
TiDB 面板中 LockResolve
-
TiDB 面板中 kv backoff count
-
参考官方文档 写写冲突 解决办法