MVCC底层原理

MVCC多版本并发控制机制

多版本=多个undo日志

什么时候会获取到事务id

事务id的生成并不是通过begin/start/transaction命令得到的,是在执行第一个修改操作或者加入排他锁操作,才会向mysql申请真正的事务id,mysql内部是严格按照事务的启动顺序来分配事务id的

(不加锁的查询操作分配的是临时事务id)

RR隔离级别MVCC的可见性算法

在可重复读隔离级别,当事务开启,执行任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束之前都不会变化(如果是读已提交隔离级别都会重新生成)这个视图由执行查询时所有未提交事务id数组(数组中最小的id)和已创建的最大事务id组成

通过reda-view的版本链进行比对的版本链比对规则

已提交的事务是可见的,未开始的事务是不可见的

一致性视图read-view:【100,200】,300

min_id = 100

Max_id=300

当trx_id

trx_id>max_id,不可见

min_id<=trx_id<=max_id,如果trx_id在数组(【100,200】)当中则不可见,反之可见

你可能感兴趣的:(Mysql,mysql,数据库)