TSO用时间窗口分配,怎么保证不同TIDB server之间的时序?

  1. 需要先明白乐观和悲观的区别,理解 TiDB 两阶段提交,题主的问题我理解只可能发生在乐观事务情况,对于悲观事务在 prewrite 阶段就会检查 ts 进入悲观锁等待
  2. 上面很多人提到了,commit 时会需要向 PD 获取一次 tso,此时 prewrite 已经过了,其他事务不应该能抢先 prewrite 而会进入 backoff retry。 反之如果其他事务先于当前事务 prewrite 成功,则当前事务 prewrite 应该 backoff retry

具体可以看一些官网介绍比如 TiDB 最佳实践系列(三)乐观锁事务 | PingCAP

另外 5.0 针对一些特殊 case 做了 1PC 优化 Async Commit 原理介绍丨 TiDB 5.0 新特性 | PingCAP

官网文档对乐观写写冲突的说明: https://docs.pingcap.com/zh/tidb/stable/troubleshoot-lock-conflicts#keyislocked-错误

1 个赞