MVCC(Mutil-VersionConcurrencyControl),就是多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。
在Mysql的InnoDB引擎中就是指在已提交读(READCOMMITTD)和可重复读(REPEATABLEREAD)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。
这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。SELECT可以去版本链中拿记录,这就实现了读-写,写-读的并发执行,提升了系统的性能。
准备表
CREATETABLE`user`(`id`INT(11)NOTNULL,`name`VARCHAR(20)NULLDEFAULTNULL)ENGINE=InnoDB;InnoDB对MVCC的实现
MVCC的实现依赖于:隐藏字段、ReadView、undolog。在内部实现中,InnoDB通过数据行的DB_TRX_ID和ReadView来判断数据的可见性,如不可见,则通过数据行的DB_ROLL_PTR找到undolog中的历史版本。每个事务读到的数据版本可能是不一样的,在同一个事务中,用户只能看到该事务创建ReadView之前已经提交的修改和该事务本身做的修改
隐藏列InnoDB存储引擎为每行数据添加了三个隐藏字段
[]: