搜索
您的当前位置:首页MVCC多版本并发控制机制详解

MVCC多版本并发控制机制详解

来源:乌哈旅游

MVCC多版本并发控制机制
上节我们说到了事务的ACID特性和四种隔离级别,其中在可重复读级别下是如何保证事务较高的隔离性的?靠MVCC(Multi-Version Concurrency Control)机制来保证的。Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。
undo日志版本链与read view机制
undo日志版本链是指一行数据被多个事务依次修改过后,在每个事务修改完后,Mysql会保留修改前的数据undo回滚日志,并且用两个隐藏字段trx_id和roll_pointer把这些undo日志串联起来形成一个历史记录版本链。
比如说我修改了一条数据,那这条修改前的数据是不是就消失了呢?不,它在我们undo回滚日志里。
下面请看图:

read-view机制:在可重复读隔离级别,当事务开启,执行任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束之前都不会变化(如果是读已提交隔离级别在每次执行查询sql时都会重新生成),这个视图由执行查询时所有未提交事务id数组(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成,事务里的任何sql查询结果需要从对应 版本链里的最新数据开始逐条跟read-view做比对从而得到最终的快照结果。
注意:begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个修改操作InnoDB表的语句,事务才真正启动,才会向mysql申请事务id,mysql内部是严格按照事务的启动顺序来分配事务id的。
版本链比对规则:

因篇幅问题不能全部显示,请点此查看更多更全内容

Top