数据库系统(六)数据库事务处理技术


数据库事务处理技术-并发控制

📌 本讲学习目标

  • 基本内容
    1. 理解并发控制的必要性
    2. 掌握事务调度及可串行性概念
    3. 掌握基于封锁的并发控制方法
    4. 理解基于时间戳的并发控制方法
    5. 了解基于有效性确认的并发控制方法
  • 重点难点
    • 三种并发不一致性问题及产生原因
    • 事务ACID特性与并发控制关系
    • 冲突可串行性判别算法
    • 两段封锁协议原理与应用
    • 基于时间戳的并发控制规则

🔍 为什么需要并发控制

并发操作导致的问题

  1. 丢失修改

    • 后一次修改覆盖前一次修改结果
    • 示例:两个事务同时减少账户余额
  2. 不可重复读

    • 同一事务两次读取同一数据结果不一致
    • 示例:事务A读取数据后被事务B修改
  3. 脏读

    • 读取到未提交的无效数据
    • 示例:事务A读取事务B未提交的修改,随后B回滚

并发控制必要性

  • 保证多用户并发访问时数据一致性
  • 避免上述三种典型不一致性问题
  • 确保数据库始终处于有效状态

📦 事务的概念与特性

事务定义

  • 宏观:应用程序员视角
    一组SQL语句的逻辑执行单元(BEGIN TRANSACTION → COMMIT/ROLLBACK)
  • 微观:DBMS视角
    一系列基本操作(读、写)的整体执行序列

ACID特性

特性描述保证机制
原子性事务操作要么全做,要么全不做日志与恢复
一致性事务操作保持数据一致性并发控制
隔离性并发事务互不干扰并发控制
持久性已提交事务结果永久保存日志与恢复
graph LR
A[应用程序] --> B[事务管理器]
B --> C[调度器]
C --> D[锁表/时间戳]
D --> E[数据存储]

🔄 事务调度与可串行性

基本概念

  • 调度:事务基本操作(读、写)的执行顺序
  • 串行调度:事务顺序执行,无交叉
  • 并发调度:操作交叉执行

可串行性

  • 定义:若调度效果等价于某个串行调度,则称其可串行化
  • 冲突可串行性:通过交换相邻无冲突操作可转换为串行调度
    • 冲突操作:不同事务对同一数据的读写/写写操作
    • 非冲突:不同事务对不同数据的操作

冲突可串行性判别算法

  1. 构造前驱图
    • 结点:事务
    • 边:Tᵢ → Tⱼ(若Tᵢ操作在Tⱼ前且冲突)
  2. 检测环存在
    • 无环 → 冲突可串行化
    • 有环 → 非冲突可串行化

示例
调度:r₂(A); r₁(B); w₂(A); r₃(A); w₁(B); w₃(A); r₂(B); w₂(B)
前驱图:T₁ → T₂(因w₁(B)在r₂(B)前)→ 无环,可串行化


🔒 基于封锁的并发控制

锁的类型

锁类型描述相容性
共享锁(S)允许多读,禁止写S相容,X不相容
排他锁(X)禁止其他读写均不相容
更新锁(U)初始读,可升级写特殊规则

封锁协议

协议级别加锁规则解决不一致性
0级写前加X锁,操作完即释放丢失修改
1级写前加X锁,事务结束释放丢失修改+脏读
2级读前加S锁(用完释放),写前加X锁(事务结束释放)丢失修改+脏读+不可重复读
3级读写前加锁,事务结束释放所有不一致性

SQL隔离级别

隔离级别脏读不可重复读幻读对应协议
读未提交0级
读已提交1级
可重复读2级
可串行化3级

⏱️ 基于时间戳的并发控制

核心概念

  • 时间戳:事务启动时分配的唯一递增标识
  • 数据元素标记
    • RT(x):最后读x的事务时间戳
    • WT(x):最后写x的事务时间戳
    • C(x):最近写x的事务提交状态

调度规则

操作条件处理方式
读操作TS(T) ≥ WT(x)允许读,更新RT(x)
TS(T) < WT(x)回滚事务
写操作TS(T) ≥ RT(x)允许写,更新WT(x)
TS(T) < RT(x)回滚事务
TS(T) < WT(x)且C(x)=true忽略写(托马斯规则)

优势:无需加锁,避免死锁
代价:可能导致事务回滚重启


✅ 基于有效性确认的并发控制

三阶段执行

  1. 读阶段:读取数据到局部空间
  2. 有效性确认阶段:检查读写集冲突
  3. 写阶段:提交修改到数据库

有效性确认规则

  1. 对FIN(U) > START(T)的事务U:
    • RS(T) ∩ WS(U) = ∅
  2. 对FIN(U) > VAL(T)的事务U:
    • WS(T) ∩ WS(U) = ∅

冲突检测

  • 读集冲突:T读取了U未提交的修改
  • 写集冲突:T和U同时修改同一数据

优势:批量检测冲突,减少回滚
局限:需要维护读写集,内存开销大


💎 总结回顾

并发控制方法对比

方法核心机制优势局限
封锁法加锁/解锁直观易实现可能死锁
时间戳时间戳排序无死锁回滚开销大
有效性确认读写集检测批量处理内存消耗大

关键要点

flowchart TD
A[并发问题] --> B[事务ACID]
B --> C[调度可串行性]
C --> D[冲突检测]
D --> E[封锁/时间戳/有效性]
E --> F[数据一致性]

DBMS核心技术
通过并发控制机制保证多用户环境下数据一致性和事务隔离性,是数据库系统核心功能之一。


文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录