数据库中的MVCC--多版本并发控制

一、前言

1、定义:MVCC(Multi-Version Concurrency Control),多版本并发控制,主要为了提高数据库

的并发性能。是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式。用于实现提交读和可重

复读这两种隔离级别。

2、MVCC用更好的方式去处理读写请求,做到在发生读写请求冲突时不用加锁。

3、MVCC中的读指的是快照读,而不是当前读,当前读是一种加锁操作,是悲观锁。

4、当前读:读取的数据库记录都是当前最新版本的

select lock in share mode(共享锁)
select for update(排他锁)
update(排他锁)
insert(排他锁)
delete(排他锁)

5、快照读:读取的数据库记录不一定是当前最新版本的,有可能是之前版本的。

二、MVCC实现原理

主要依赖于记录中的三个隐藏字段,undolog,read view来实现的。

1、undo log:回滚日志,存储进行insert,delete,update操作的时候产生的方便回滚的日志。

2、版本链:历史版本由回滚指针连接起来组成的一个链表,链尾是最旧的历史版本,链首是最新

的版本。

3、readview:确定在版本链中选择哪一条记录。所谓ReadView,是指事务(记做事务A)在某一

时刻给整个事务系统(trx_sys)打快照,之后再进行读操作时,会将读取到的数据中的事务id与

trx_sys快照比较,从而判断数据对该ReadView是否可见,即对事务A是否可见。

4、RC(读已提交)和RR(可重复读)级别下的innoDB快照读有什么不同?

因为Readview生成的时机不同,从而造成RC、RR级别下快照读的结果的不同。

(1)在RC隔离级别下,是每个快照读都会产生并获取最新的read view,所以在RC级别下的事务

中可以看到别的事务提交的更新。

(2)在RR隔离级别下,则是同一个事务中的第一个快照才会创建readview,之后的快照读获取

的都是同一个readview,所以对之后的修改不可见。

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