MySQL MVVC思考

内容纲要

是什么

  • 一致性读视图,即consistent read view,用于支持RC(Read Committed,读提交)和RR(Repeatable Read,可重复读)隔离级别的实现。

实现原理

  • InnoDB里面每个事务有一个唯一的事务ID, transaction id。它是在事务开始的时候向InnoDB的事务系统申请的,是按申请顺序严格递增的。而每行数据也都是有多个版本的。每次事务更新数据的时候,都会生成一个新的数据版本,并且把transaction id赋值给这个数据版本的事务ID,记为row trx_id。
  • 在事务未提交的情况下, 当前事务正常情况下只能读取到比自己trx_id小的, 并且已经提交的事务内容, 或者自己更改的内容.
  • 如果当前存在一个trx_id高于当前事务, 并且先于自己提交, 自己同时又去更新数据:
    • 更新数据的时候受限于行锁, 同一时间只会有一个事务更新成功, 并且在MVVC中, 更新的时候存在当前读, 也就是说更新的时候我一定可以或取到最新的数据, k = k+1, 在这个操作下,k+1 中的k一定是最新的k , 联想到数据库乐观锁下的version也就可以在多个事务之下保证线程安全, 此外当前线程更新了k之后, 再或取k则可以或取到最新的k, 因为事务内是可以或取到自己所提交的内容

核心小计

  • MVVC实现原理, txr_id进行版本控制
  • k = k + 1 触发当前读, 并且修改之后当前事务可以或取到正确的数据
  • 多个线程在操作同一行数据的时候, 无论事务是否提交, 都需要等待行锁
THE END
分享
二维码
< <上一篇
下一篇>>