1, 概述

  • MVVC (Multi-Version Concurrency Control 多版本并发控制) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)是一种基于多版本的并发控制协议,只有在InnoDB引擎下存在 。

  • MVCC是为了实现事务的隔离性,通过版本号,避免同一数据在不同事务间的竞争,你可以把它当成基于多版本号的一种乐观锁。 当然,这种乐观锁只在事务级别提交读和可重复读有效。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。

  • 在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能。

  • MVCC只在 READ COMMITTED(读已提交)REPEATABLE READ(可重复读) 两个隔离级别下工作。其他两个隔离级别够和MVCC不兼容,因为 READ UNCOMMITTED 总是读取最新的数据行,而不是符合当前事务版本的数据行。而 SERIALIZABLE 则会对所有读取的行都加锁


2,
MVVC的实现机制

2.1 InnoDB的数据结构

图片.png

InnoDB在每行数据都增加三个隐藏字段

  • DB_ROW_ID
  • DB_TRX_ID 每次一个事务对引记录进行改动时,都会把该事务的事务id赋值给trx_id