一致性非锁定读操作

2021.03.13 15:03 579
阅读约 3 分钟

一致性非锁定读操作是指InnoDB储存引擎通过多版本并发控制的方式来读取当前执行时间数据库中的行的数据。如果读取的行正在执行DELETE或者UPDATE操作,这时读取操作不会因此等待行释放锁,而是会去读取一个快照数据。

快照数据是指该行之前的版本,该实现是通过Undo日志来实现的。Undo用来在事务中回滚数据,因此快照数据本身没有额外的开销,读取快照数据是不需要上锁的,因为没有必要对历史数据进行修改。

一个行可能有多个快照数据,我们称这种技术为多版本技术。由此带来的并发控制,我们称之为多版本并发控制(Multi Version Concurency Control,MVVC)。MVCC的核心就是 Undo log+ Read view,“MV”就是通过 Undo log来保存数据的历史版本,实现多版本的管理,“CC”是通过 Read view来实现管理,通过 Read view原则来决定数据是否显示。同时针对不同的隔离级别, Read view的生成策略不同,也就实现了不同的隔离级别。

在RC和RR(InnoDB默认隔离级别)下,InnoDB储存引擎使用非锁定一致性读。

然而对于快照数据的读取定义却不同。在RC隔离级别下,非锁定一致性读总是读取最新版本的快照数据。在RR级别下,读取的是事务开始时的行数据版本。

 

字数:559 发布于 9 个月前
Copyright 2018-2021 Siques