MVCC的实现原理

7 阅读1分钟

MVCC的意思是多版本并发控制,它维护一个数据的多个版本,使得读写操作没有冲突。它的底层实现主要分成了三个部分,第一个部分是隐藏字段,第二个部分是undolog日志,第三部分是readView读视图

隐藏字段指的是:在MySQL中给每个表都设置了隐藏字段,有一个是trx_id(事务id),记录每一次操作的事务,是自增的;另一个字段是roll_pointer(回滚指针),指向上一个版本的事务版本记录地址

undolog主要作用是记录回滚日志,存储老版本数据,在内部会形成一个版本链,在多个事务中并行操作某一行记录,记录不同事务修改的数据的版本,通过roll_pointer指针形成一个链表

readView解决的是一个事务查询选择版本的问题,在内部定义了一些匹配规则和当前的一些事务id判断该访问哪个版本的数据,不同的隔离级别的快照读都是不一样的,最终的访问结果不一样。如果是读已提交隔离级别,每一次执行快照读时生成ReadView,如果是可重复读隔离级别,尽在第一次执行快照读的时候生成ReadView,后续复用。