悲观模式下写写冲突测试的疑问

  1. 较新的版本里 tidb.log 在debug日志级别可能才有这种write conflict记录
  2. tidb的悲观事务是在DML阶段上锁,即往tikv写入 lock info,在写入时会有冲突检测,检查是否有commit的事务commit_ts比当前事务的forupdatets大,大则返回write conflict信息,
    session1 开始事务的txnStartTS=435162658714681346 执行DML时forUpdateTS=435162658714681346,session2 提交后conflictCommitTS=435162668178079745 。sess 1 的forUpdateTS 小于sess2.CommitTS 所以报冲突
    3、 猜测 在悲观事务里会重新使用从pd获取ts作为forupdatets,然后检查执行SQL

下面是悲观锁加锁流程: