tidb 的悲观事务&&可重复读 RR 级别中,快照读 select 不需要检测 lock 吗?

这里的锁是不一样的,乐观锁和悲观锁中的读写冲突指的是,两阶段提交的时候,Prewrite 加的锁会阻塞能看到该锁的事务的读,原因是写下该 lock 的事务可能已经获取了 commit ts,且 commit ts 小于看到锁的事务的 start ts,这时候 select 都要等锁。
你描述的悲观锁不用等锁,指的是悲观锁两阶段提交前,会加一把锁,确保两阶段提交的时候不会发生 write conflict 的错误,这里的事务一定还没获取 commit ts,所以悲观锁不会阻塞读(和乐观锁一样,悲观事务提交仍要走一遍完整的 Percolator 提交流程,只有当所有悲观锁被 Prewrite 成 Percolator 的锁才会到 Commit 阶段)。

1 个赞