【CMU 15-445】Lecture 17: Timestamp Ordering Concurrency Control 学习笔记

Timestamp Ordering Concurrency Control

  • [Timestamp Ordering Concurrency Control](#Timestamp Ordering Concurrency Control)
  • [Basic Timestamp Ordering (BASIC T/O)](#Basic Timestamp Ordering (BASIC T/O))
    • [Read Operations](#Read Operations)
    • [Write Operations](#Write Operations)
    • [Optimization: Thomas Write Rule](#Optimization: Thomas Write Rule)
    • [Potential Issues](#Potential Issues)
  • [Optimistic Concurrency Control (OCC)](#Optimistic Concurrency Control (OCC))
    • [Validation Phase](#Validation Phase)
  • [Dynamic Databases and The Phantom Problem](#Dynamic Databases and The Phantom Problem)
  • [Isolation Levels](#Isolation Levels)

本节课主要介绍一些基于时间戳的并发控制协议。

Timestamp Ordering Concurrency Control

时间戳排序是一种乐观的并发控制协议,它假设事务间的冲突很少。系统中的每个事务 T i T_i Ti在执行前被赋予一个唯一 的时间戳 T S ( T i ) TS(T_i) TS(Ti),这个时间戳可以是系统时间或者一个计数器变量,各有优劣。若 T S ( T i ) < T S ( T j ) TS(T_i) < TS(T_j) TS(Ti)<TS(Tj),则系统认为,在一个串行调度中, T i T_i Ti需要在 T j T_j Tj前面执行。

Basic Timestamp Ordering (BASIC T/O)

最基础的时间戳排序协议会为数据库中的每个数据对象 X X X维护两个变量,分别是成功读取该变量的最大事务时间戳 R − T S ( X ) R-TS(X) R−TS(X)、最后一次成功修改该变量的事务时间戳 W − T S ( X ) W-TS(X) W−TS(X),并根据以下条件判断事务的操作是否能正常执行。

Read Operations

对于某个事务 T i T_i Ti发起的读 X X X请求,如果 T S ( T i ) < W − T S ( X ) TS(T_i) < W-TS(X) TS(Ti)<W−TS(X),说明将会读取未来将修改的值,此时 T i T_i Ti会被中止并重新启动;否则,成功执行该读请求,并更新 R − T S ( X ) = m a x ( R − T S ( X ) , T S ( T i ) ) R-TS(X)=max(R-TS(X), TS(T_i)) R−TS(X)=max(R−TS(X),TS(Ti))。

Write Operations

对于某个事务 T i T_i Ti发起的写 X X X请求,如果 T S ( T i ) < R − T S ( X ) TS(T_i)<R-TS(X) TS(Ti)<R−TS(X)或者 T S ( T i ) < W − T S ( X ) TS(T_i)<W-TS(X) TS(Ti)<W−TS(X),说明这个写操作会影响未来的读或写,此时 T i T_i Ti会被中止并重启;否则,成功执行该写请求,并更新 W − T S ( X ) = T S ( T i ) W-TS(X)=TS(T_i) W−TS(X)=TS(Ti)

在以上两个条件中,并没有确保未来的写不会影响现在的读,则可能出现不可重复读的现象,于是在操作成功执行时, T i T_i Ti需要备份 X X X的值确保自己可以重复读 X X X而不被未来的事务影响。

Optimization: Thomas Write Rule

对于基本的时间戳排序协议,存在一个优化,当操作为写操作且 T S ( T i ) < W − T S ( X ) TS(T_i)<W-TS(X) TS(Ti)<W−TS(X)时,可以忽略该写操作并继续执行 T S ( T i ) TS(T_i) TS(Ti),这是因为在未来已经存在对 X X X的写操作了,于是 T i T_i Ti对 X X X的写操作将永远不会被读到。如果 T S ( T i ) TS(T_i) TS(Ti)在此操作后还有对 X X X的读操作,那么可以对备份的 X X X值进行修改。

Potential Issues

  • 维护备份会有额外的开销
  • 长事务会面临饥饿问题
  • 可能产生不可恢复的调度

Optimistic Concurrency Control (OCC)

乐观并发控制是另外一种乐观的并发控制协议,其主要思想是为每个事务开辟一个private workspace,类似git的版本管理。事务对某个对象的写操作会将该对象复制到workspace中并修改值,读操作则仅复制。当事务提交时,workspace中的修改将会进行有效性检查,如果检查通过,则更新至数据库中。

OCC包含以下三个阶段:

  • Read Phase:在此阶段,DBMS维护事务读或写的对象集合,存储在workspace中
  • Validation Phase:当一个事务提交时,DBMS根据一定规则判断该事务的对象集合是否与其他事务产生冲突
  • Write Phase:如果通过上一阶段的校验,则将更新同步至数据库中;否则中止并重启该事务

Validation Phase

在验证阶段,对于事务 T i T_i Ti和 T j T_j Tj,分为以下三种情况:

  • Case 1:在 T j T_j Tj开始读阶段前 T i T_i Ti结束了写阶段。也就是说, T i T_i Ti与 T j T_j Tj的执行时间线没有交集,那么很明显这两个事务不会冲突
  • Case 2:在 T j T_j Tj开始写阶段前 T i T_i Ti结束了写阶段。也就是说, T i T_i Ti的写阶段与 T j T_j Tj的读阶段可能有交集,那么需要保证 T i T_i Ti的写对象集 与 T j T_j Tj的读对象集没有交集
  • Case 3:在 T j T_j Tj读阶段结束前 T i T_i Ti结束了读阶段。也就是说, T i T_i Ti的写阶段与 T j T_j Tj的读阶段有交集,且可能与 T j T_j Tj的写阶段也有交集,那么需要保证 T i T_i Ti的写对象集 与 T j T_j Tj的读写对象集都没有交集。

Dynamic Databases and The Phantom Problem

之前考虑的都是静态数据库,而在动态数据库中(记录除了更新还可能新增或删除),若仅仅锁住已存在的记录, 则可能产生幻读现象(Phantom Problem)。幻读就是指一个事务以相同条件做出的多次查询中,存在不同的结果。产生幻读的原因,则是仅仅考虑了数据库中已存在的记录,而未考虑新增或者删除的记录。

有以下方法可以解决幻读问题:

  • Re-Execute Scans:在事务执行过程中,DBMS会记录所有查询的WHERE子句,在事务提交时,DBMS会重新扫描一次,确保所有查询结果的一致性。
  • Predicate Locking:使用谓词锁,例如在WHERE子句中锁住条件,其他事务无法新增或删除满足被锁条件的记录。
  • Index Locking:锁住索引键中的某个范围,使得其他事务无法在此范围中新增数据。有以下几种不同类型:
    • Key-Value Locks:在单一的Key上加锁
    • Gap Locks:在Key与Key之间的gap上加锁
    • Key-Range Locks:锁住从一个Key到另一个Key之间的一段范围
    • Hierarchical Locking:类似上节课提到的多粒度锁,利用意向锁提高效率

Isolation Levels

数据库的隔离性级别包含以下四种:

  • Serializable 可串行化
  • Repetable read 可重复读
  • Read Commited 已提交读
  • Read Uncommited 未提交读

    除了这四种常见的,还有Cursor Stability和Snapshot Isolation,它们与现有的几种隔离性级别的关系如下所示。
相关推荐
气概43 分钟前
法奥机器人学习使用
学习·junit·机器人
@LetsTGBot搜索引擎机器人1 小时前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
Qhumaing1 小时前
C++学习:【PTA】数据结构 7-1 实验7-1(最小生成树-Prim算法)
c++·学习·算法
好大哥呀1 小时前
Java Web的学习路径
java·前端·学习
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
冉冰学姐2 小时前
SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·开题报告、
Tony Bai2 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
wb043072013 小时前
SQL工坊不只是一个ORM框架
数据库·sql
梦雨羊3 小时前
Base-NLP学习
人工智能·学习·自然语言处理
至善迎风3 小时前
Redis完全指南:从诞生到实战
数据库·redis·缓存