tidb悲观锁

tidb 悲观锁在执行dml过程中就要写入tikv default cf和lock cf信息。但是文档提到commit之前都是内存操作,只有commit才发起写入tikv 操作,这样就前后矛盾了,正确应该是如何?

乐观模式下再Prewrtie时 会进行写锁信息,悲观锁时在DML期间就把锁信息写进去,此时的悲观锁就是一个占位符是空的,等到提交时就和乐观模式一样去写真正锁信息。 在tug里搜索悲观锁 会有很多文章

1赞

也就是说: 悲观锁模式下,在执行行dml过程中就要写入tikv default cf和lock cf信息,是吗?

图上红框位置是加悲观锁过程,锁信息会写入到lock cf, tidb server间相无关联只有将锁信息放到tikv才能全局可见。 后面提交时和乐观事务一样,写defalut /write cf

  1. 数据首先是写到tidb的内存里面的
  2. 然后进行2PC的Prewrtie阶段,在这个阶段,数据才会从 tidb 往 tikv 写数据
  3. 首先是写到memtable(根据数据的大小写到某个CF的memtable),然后刷盘。

在commit之前,sql语句一直处于执行中状态。

悲观锁是在DML阶段会写锁信息,提交后会替换成标准乐观模式锁信息,写了个验证文档

好的!

恩,明白了,default cf 不是在dml期间写入的。是在发起commit 后写write cf