数据库系统概论笔记(第十一章)

第十一章.并发控制


1. 并发控制概述
事务是并发控制的基本单位。
目的是为了保证事务的隔离性和一致性

并发操作带来的数据不一致性

  • (1)丢失修改:两个事务读入同一数据并修改,一个事务提交的结果破坏了另一个事物的提交结果,导致被破坏的事务修改被丢失。
  • (2)不可重复读:一个事务T1读取数据后,另一个事务T2执行更新,T1这个事务再次读取数据的结果和上一次不同
  • (3)读脏数据:一个事务T1修改某一数据,另一事务T2读取同一数据后,T1事务的修改被撤销,则另一个事务T2读到的数据和数据库中的不一致

并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制…

2. 封锁
实现并发控制的一个非常重要的技术。

基本的封锁类型有两种:排他锁和共享锁

  • 排它锁(X锁,写锁):若事务T对数据对象A加X锁,只允许T读写,其他任何事务都不能再加对A任何类型的锁,直到T释放这个锁。
  • 共享锁(S锁,读锁):若事务T对数据对象A加S锁,T只能读但不能写,其他事务只能对A加S锁

3. 三级封锁协议

  • 一级封锁协议:一个事务修改数据时要对数据对象加X锁,直到事务结束释放。可以防止丢失修改。
  • 二级封锁协议:一级封锁协议 + 读取数据时要加S锁,读完就释放。可以防止丢失修改、读脏数据。
  • 三级封锁协议:一级封锁协议 + 读取数据时要加S锁,事务结束释放。可以防止丢失修改、读脏数据、不可重复读。

区别:什么操作需要申请封锁、何时释放锁

4. 活锁:事务T1申请的封锁对象比较热门,一直有别的事务不停占用,T1永远在等待。
处理方法:先来先服务策略

5. 死锁:T1等待T2封锁占用的资源,T2等待T1封锁占用的资源。导致T1,T2永远不能结束

预防方法:一次封锁法(事务一次将所有数据加锁)、顺序封锁法(预先规定所有的封锁顺序)

诊断方法:超时法、事务等待图法

处理:选择处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁

6. 可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,成这种调度策略是可串行化调度
可串行化调度是并发事务正确调度的准则

7. 两段锁协议

事务按照时间分为两个阶段:

  • 第一阶段是获得封锁,也称扩展阶段,这一阶段事务可以申请任何锁
  • 第二阶段是释放封锁,也称收缩阶段,这一阶段事务可以释放任何锁,但是已经不能再申请任何锁了

可以证明所有并发事务遵循两段锁协议,则任何并发调度策略都是可串行化的

8. 封锁的粒度:封锁对象的大小
封锁对象可以是逻辑单元:元组、关系、索引项、索引、数据库,也可以是物理单元:页、物理记录。

9. 意向锁:如果一个结点加意向锁,则说明该结点下层结点正在被加锁
分类:意向共享锁(IS锁)、意向排它锁(IX锁)、共享意向排它锁(SIX锁)。
SIX = S + IX。若对某个表加SIX,表示事务要读整个表,同时要更新个别元组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值