多版本并发控制技术

2025 年 2 月 24 日 | 3 分钟阅读

在本文中,我们将详细介绍多版本并发控制技术。

引言

在早期的并发控制技术中,通过中止和回滚事务或让事务等待另一个事务锁定的数据项来确保可串行化。

因此,通过在数据项更新时保留其旧值,可以避免这些问题。维护数据项多个值值的技术称为多版本并发控制技术。

在此技术中,当事务对数据项执行读取操作时,会选择适当版本的数据项进行序列化,以维护当前正在执行的事务的序列,并且

当事务对数据项执行写入操作时,它会写入新版本,而数据项的旧值将被保留。

最常用的多版本并发控制技术如下:

  • 多版本时间戳排序
  • 多版本两阶段锁定

下面将逐一解释

多版本时间戳排序:在此技术中,在事务开始之前确定系统中每个事务的唯一固定时间戳,并表示为 TS(T)。每个数据项 X 都连接着一个版本列表 ,并且每个版本 Xi 都有以下两个时间戳:

  1. Write_TS(Xi):它是成功写入 Xi 版本的所有事务的最大时间戳。
  2. Read_TS(Xi):它是成功读取 Xi 版本的所有事务的最大时间戳。

多版本时间戳排序技术具有读取请求永不失败且永不被挂起的特性,但它存在两个不期望的特性。

  • 读取数据项还需要更新读取时间戳。这可能导致两次磁盘访问而不是一次。
  • 事务之间的冲突通过回滚而不是等待来解决。

多版本两阶段锁定:多版本两阶段锁定结合了并发控制和两阶段锁定的优点。数据项的各种锁定模式如下:

  • 读取
  • 写入
  • 认证

项目 X 的 lock(X) 状态如下:

  • 读锁定
  • 写锁定
  • 认证锁定

锁定方案基本上只使用两种锁,即读锁和写锁。一旦事务获取了数据项的写锁,任何其他事务都无法访问该数据项。但是,多版本两阶段锁定方案允许其他事务在某个事务持有相同数据项 X 的写锁时读取数据项 X。

这是通过每个数据项 X 的两个版本来实现的。

  • 第一个版本必须始终由已提交的事务写入。
  • 当事务 T 获取数据项的写锁时,会创建第二个版本 Y。其他事务在 T 持有写锁期间可能继续读取 X 的已提交版本。当 T 准备提交时,它必须在提交之前获取它当前持有写锁的所有数据项的认证锁。认证锁与读锁不兼容,因此事务可能必须推迟其提交操作,直到所有被写锁定的数据项被任何读取事务释放,才能获得认证锁。一旦获得认证锁,数据项的已提交版本 X 就设置为 Y 的值,Y 被丢弃,然后释放认证锁。
读取写入认证
读取是的是的不能
写入是的不能不能
认证不能不能不能