MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制。在介绍MVCC之前我们先来简单了解下事务的隔离级别:
read uncommitted:脏读,一个事务可以读到另外一个事务未提交的数据,大多数关系型数据库不支持。
read committed:提交读,一个事务可以读到其他事务已经提交的数据,大多数数据库的缺省模式。
repeatable read:一个事务执行过程中访问的数据是一致的,也就是一个事务中多次读到的数据不会变化。
serializable:序列化,事务串行化执行,避免不一致。代价很大,OLTP系统中很少使用。
在大多数关系型数据库中默认的事务隔离级别都是read committed(mysql中默认是repeatable read)。也可以根据业务场景的需要去选择合适的隔离级别,例如在一个事务中,使用select for update来避免读到不一致的数据,如果不是为了排他性的锁定,用RR事务隔离级别来代替可以获得更好的性能。
常见的并发控制有:
MVCC:Multi-version Concurrency Control (多版本并发控制)。
S2PL: Strict Two-Phase Locking(严格二阶段锁):读写互斥,保证串行。
OCC:Optimistic Concurrency
Control(乐观并发控制):和悲观锁不同,乐观锁在提交前不加锁,提交时如果读取时的数据被其他事务修改并提交,则回退事务。
简单来说&#x