[FAQ] Error 9007: Write conflict

[问题澄清]

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

  • 参考官方文档 写写冲突 解决办法