ITPub博客

首页 > 数据库 > 数据库开发技术 > 并发访问控制(5)--MVCC算法

并发访问控制(5)--MVCC算法

原创 数据库开发技术 作者:那海蓝蓝 时间:2024-03-18 07:08:00 0 删除 编辑

注释:如下所提及的文献,请按照索引号对应参考《分布式数据库原理、架构与实践》一书的引用参考。

MVCC算法历史

1970年MVCC技术被提出,1978年发布的文献[30]对该技术进行了进一步描述,1981年文献[108]详细描述了MVCC技术,但是其描述的MVCC技术是基于时间戳的。

1995年,在文献[79][1]中第一次提出快照隔离(Snapshot Isolation)的概念,并将其作为隔离级别的一部分。

2008年,文献[114]提出可序列化的快照隔离( Serializable Snapshot Isolation)技术,并指出该技术是基于MVCC技术的可串行化隔离级别实现的。这使得PostgreSQL V9.1使用该技术实现了可串行化隔离级别。

2012年,文献[79]提出写快照隔离(Write-snapshot Isolation)技术,即通过验证读写冲突实现基于MVCC技术的可串行化隔离级别,这种方式相较于依靠检测写写冲突的方式可提高并发度(某种写写冲突是可串行化的)。该文献的作者基于HBase做了系统实现。

2012年,文献[68]提出如何在PostgreSQL中实现SSI技术。该文献不仅讲述了序列化快照的理论基础、PostgreSQL对于SSI技术的实现方式,还提出为支持只读事务而实现的安全快照(Safe Snapshots)、 可延迟交易(Deferable Transaction)。为了避免读写冲突对事务回滚造成影响,该文献还提出可对被回滚的事务采取安全重试(safe retry)策略。另外,该文献还涉及两阶段提交对选取回滚读写冲突的事务的影响等重要话题。

文献[281]较为系统地讨论了MVCC技术涉及的四个方面:并发访问控制协议、多版本存储、旧版本垃圾回收、索引管理。另外讨论了MVCC技术多种变体(MV2PL、MVOCC、MVTO等)的实现原理,并在OLTP workload上测试评估各个变体的效果。文献[280]则对于MVCC技术的旧版本垃圾回收进行了详细讨论。

[1] 该文献也提出了不同于ANSI-SQL标准定义的四种隔离级别。

MVCC算法解决了什么问题?

MVCC技术是并发访问控制的核心技术之一,在数据库中,用于防止用户表数据被并发事务访问时出现数据不一致的问题。MVCC技术的核心有三个:一是多版本;二是快照;三是可见性判断算法。

MVCC技术,使得对历史数据的访问一定程度地摆脱了因并发对当前最新数据的一致性影响(互相影响),使得并发效率得以提高。

多版本

数据库在一个数据项上实施基于封锁的并发访问控制技术时,因为读操作会阻塞写操作,写操作会阻塞读操作,写操作也会阻塞写操作,所以数据库事务处理的性能会很差。MVCC技术通过对用户的表数据,即元组进行“分身”处理,可把一个数据项按照其生存状态(出生中[1]、活着[2]、死去[3]、正在经历凤凰涅磐般的生死历程[4]等)和阶段生命期(某个版本的诞生和死亡时间段)区分开。这样对于一个数据项来说,就会在时间的长河中有多个阶段,每个阶段对应一个版本(包括当前版本和历史版本),每个当前版本可被事务执行写操作,每个历史版本在满足事务一致性的前提下可被任何事务执行读操作,而历史版本就是一个静态的存在。这就是MVCC的物理基础。

[1] INSERT或UPDATE操作造成的一个过程状态。

[2] INSERT或UPDATE操作造成的一个结果状态。

[3] UPDATE或DELETE操作造成的一个结果状态。

[4] UPDATE操作造成的一个过程状态,使得旧版本死去、新版本诞生。

快照

快照用以帮助事务获取满足一致性的状态的数据。快照的形式有两种:

1)数据库当前状态(快照生成时)。即获取运行的数据库系统中当前状态下的所有并发事务(动态事务),然后将这些事务组成一个数据结构,即构成一个快照,PostgreSQL、InnoDB都是这么实现的。当有大量并发事务存在时,此种算法的效率会急剧下降。

2)时间长河中的一个时间点。这个时间点结合数据项上的事务提交时间戳值,能知道哪些数据项是可见的。即使在有大量并发存在的情况下,通过该方式进行相关处理,系统的性能也不会急剧下降。

数据可见性判断算法

数据可见性判断算法依据快照来遍历多版本,以确定哪些数据在该事务的快照下是可见的。静态存在的版本,其状态和生命周期会被动态的事务读或写,通过数据可见性判断算法,可使得多个动态的事务同时读写同一个数据项的不同版本,甚至是同一个版本。因而这种算法与封锁的并发访问控制技术相比有了更高的并发度。

因此,MVCC技术在通过SSI技术确保不出现数据异常等正确性问题之外,还提高了事务并发度,也就是说MVCC技术可以确保正确性并获得较高的效率。

扫码加关注,知数行云,专业有深度


声明:本文禁止用于开发“任何软件程序,包括但不限于训练机器学习或人工智能(AI)系统”。


原文作者:那海蓝蓝知数行云;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-09-02

  • 博文量
    52
  • 访问量
    31002