数据库并发控制

Scroll Down

第十一章 并发控制

并发的概念

  1. 单处理器系统:事务并行操作轮流交叉运行
  2. 多处理器系统:同时并发方式,多个事务真正并行

并发带来数据一致性的问题

  1. 丢失修改
    • 两个事务同时对同一个数据进行修改
  2. 不可重复读
    • T1读取某一数据后,T2执行更新操作,T1无法再现前一次读取的结果
    • T1读取某数据后,T2删除了某些数据,发现记录神秘地消失了
    • T1读取某些数据后,T2添加了某些数据,发现某些记录神秘地消失了
  3. 读“脏“数据
    • 读取的数据和数据库中的数据不一致

并发控制的主要方式

  1. 封锁
  2. 时间戳
  3. 乐观控制法
  4. 多版本并发控制

封锁

  1. 排他锁(写锁)exclusive lock
  2. 共享锁(读锁)share lock
相容矩阵
T1/T2XS
XNN
SNY

封锁协议

  1. 一级封锁协议
    • 在修改前必须对数据加X锁
    • 解决了丢失修改
  2. 二级封锁协议
    • 在一级封锁协议的基础上,加上在读取数据前必须加S锁,读完即可释放
    • 解决了不读脏数据和丢失修改
  3. 三级封锁协议
    • 在一级封锁协议的基础上,加上读取数据前必须加S锁,直到事务结束
    • 解决了不可重复读,不读脏数据,丢失修改

活锁和死锁

  1. 活锁的避免:采用先来先服务策略
  2. 死锁:T1等待T2,T2又在等待T1
  3. 死锁的预防:
    • 一次封锁法:要求将要加锁的东西全部加锁
    • 顺序封锁法:对事务对象规定一个封锁顺序,所有事务按一个顺序封锁

死锁的诊断和解除

  1. 超时法
  2. 等待图法

并发调度的可串行性

  1. 定义:多个事务并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时结果相同
  2. 冲突可串行化调度
    • 冲突操作:不同的事务对同一个数据的读写操作和写写操作
    • 冲突操作的顺序是不可调换的

二段锁协议

  1. 第一阶段:(扩展阶段)获得锁
  2. 第二阶段:(收缩阶段)释放锁
  3. 是冲突可串行化的充分条件

封锁的粒度

  1. 封锁对象的大小称为封锁的粒度
  2. 多粒度封锁:一个结点加锁意味着其后裔节点也被加同样的锁
    • 显式封锁:应事务的要求直接加到数据对象上的锁
    • 隐式封锁:该数据对象没用被独立加锁,由于其上层节点被加了锁而被加锁
  3. 意向锁