数据库系统第八章 并发控制.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
封锁协议总述
三级协议的区别
什么操作需要申请封锁 何时释放锁
X锁
操作 事务 结束 结束 释放 释放
S锁
操作 事务 结束 结束 释放 释放
一级 二级 三级
Y
Y
Y
Y
Y
一致性保证
不丢 不读 可重 失修 “脏” 复读 改 数据
Y
Y
Y
Y
Y
Y
8.4 活锁和死锁
情况和OS中的类似。 活锁:永远等待(分配不公)
多个事务的真正并行运行
并发控制机制→数据库系统中衡量的标志
8.1 并发控制概述
事务:并发控制的基本单位:ACID特性 破坏ACID的原因:
多个事务对数据库的并发操作
解决的方法:对并发控制进行正确调度 简单的例子:售票系统 不一致性的三种类型
丢失修改、不可重复读、读“脏”数据
可串行化的调度:
多个事务的并发执行是正确的,当且仅当其 结果与按某一次序串行地执行它们时的结果 相同。
可串行性:是并发事务正确性的准则
一个给定的并发调度,当且仅当它是可串行 化的,才认为是正确调度。
8.5 并发调度的可串行性
DBMS的并发机制必须提供一定地保证调 度可串行化的手段。
T1封锁了R:T2请求R, T3也请求R; T1结束释放T3,T3结束又释放了T4; →T2永远在等待。
死锁:永远不能结束(互相等待)
T1封锁了R1,T1又请求R2; T2已封锁了R2,T2又请求R1;
8.4 活锁和死锁
活锁的处理方法:排队机制 死锁的处理方法:和OS中类似
8.1 并发控制概述
1、丢失修改
T1读入A; T2读入A; T1修改结果,并提交; T2修改结果,并提交;
T1对数据的修改被丢失了。
8.1 并发控制概述
丢失修改的具体表现
T1和T2同时读入同一数据,并进行修改; T1先提交修改结果; T2在提交修改结果;
T1对数据的修改被丢失了。
保证了其它事务可以读A,但在T释放S锁之前不能对 A做修改。
8.2 封锁
X锁和S锁的相容性 要加的锁
T2 X
S
T1
X
N
N
Y
已加 的锁
S
N
Y
Y
Y
Y
Y
8.3 封锁协议
封锁协议
规定何时申请X锁或S锁、持锁时间、何时释 放等。
三级封锁协议
在三个级别上解决:丢失修改、不可重复读 和读“脏”数据等问题。
8.1 并发控制概述
2、不可重复读
T1读A、B,对A和B求和;
T2读B,将B*2写回;
T1读A、B,对A和B求和;
两次结 果不同
8.1 并发控制概述
2、不可重复读的三种情况
修改的情况:T1读数据,T2对同一数据修改, T1再次读得到不同的值;
删除的情况:T1从数据库中读数据记录,T2 对这些记录进行了一定删除,T1再读发现有 些记录没了;
不同点:
一段锁协议:必须一次性将所有要使用的数 据全部加锁;
两段锁协议:不要求一次全部加锁, 一段锁协议:是两段锁协议的特例,它不会
产生死锁; 两段锁协议:可能会产生死锁。书上图87
8.7 封锁的粒度
封锁粒度(granularity):封锁对象的大小 封锁对象:
逻辑单元:属性值、属性值的集合、元组、关 系、索引项、整个索引、整个数据库;
8.6 两段锁协议
含义:事务分两个阶段
1、获得封锁(扩展阶段):事务可以申请获 得任何数据项上的任何类型的锁;不能释放 任何锁。
2、释放封锁(收缩阶段):事务可以释放任
何数据项上的任何类型的锁;不能再申请任
何锁。
充分条件
事务尊守两段锁协议
可串行化调度
不是必要条件
两段锁协议和一段锁协议的比较
死锁的诊断与解除
超时法:如果一个事务的等待超过一定时限。 缺点:时限很难选取。
事务等待图法:一个有向图G=(T,U),T(事 务)为结点集,U(等待情况)为边的集合。并发 控制子系统周期性检查图,看有无回路。
死锁的解除:选择一个死锁代价最小的事务,撤 消,让其重新执行。
8.5 并发调度的可串行性
8.2 封锁
封锁的类型:
排它锁:X锁 写锁
事务T对数据对象A加X锁,则只允许T读取和修改A, 其它任何事务不能再对A加任何类型的锁,直到T释放 A上的锁。
保证了其它事务在T释放X锁之前不能读或修改A。
共享锁:S锁 读锁
事务T对数据对象A加S锁,则事务T可以读A但不能修 改A,其它事务只能再对A加S锁,而不能加X锁,直 到T释放A上的S锁
隐式封锁:没有对该数据对象独立加锁,因 为对其上级结点加锁,而导致的加锁。
存在的问题
对数据对象加锁时,需要对其上级和下级对 象进行检查,看是否有冲突。
8.7.2 意向锁
定义:
自上而下申请 自下而上释放
如果对一个结点加意向锁,则说明对该结点 的下层结点正在被加锁;
对任一结点加锁时,必须对它的上层结点加 意向锁。
三种类型:
意向共享锁(IS锁):表示后裔拟加S锁;
意向排它锁(IX锁):表示后裔拟加X锁;
共享意向排它锁(SIX锁):对它加S锁,再加
IX锁。
8.7.2 意向锁
锁的强度
指它对其他锁的排斥程度; 事务可以以强锁代替弱锁。
X
SIX
S
IX
IS
产生数据不一致的根本原因
并发操作破坏了事务的隔离性 实现并发控制的主要技术→封锁locking
8.2 封锁
封锁的定义:
事务T在对某个数据对象操作之前,先向系统 发出请求,对其加锁;
加锁后的事务T就有可该数据对象进行一定控 制;
在事务T释放锁之前,其他事务不能更新此数 据对象。
8.7.1 多粒度封锁
多粒度树:
根结点(整个数据库):最大的数据粒度; 叶结点:最小的数据粒度;
多粒度封锁协议:
允许多粒度树种的每个结点被独立地加锁; 对一个结点加锁→对后裔结点加锁; →显式封锁、隐式封锁。
8.7.1 多粒度封锁
两种封锁方式:
显式封锁:应事务的要求直接加到数据对象 上的封锁;
死锁的预防:
一次封锁法:要求每个事务必须一次将所有要使用的 数据都加锁。 存在的问题:扩大了封锁的范围,会有新的封锁要 求。
顺序封锁法:预先对数据对象规定一个封锁顺序。 存在的问题:数据对象极多维护困难,很难预先确 定每个事务要封锁的对象。
8.4 活锁和死锁
死锁的处理方法:
物理单元:页、块
封锁的粒度和并发控制的开销相关
粒度大→并发度小→系统开销小; 一个系统中 粒度小→并发度大→ 系统开销大; 很难选择
8.7 封锁的粒度
多粒度封锁
在一个系统中同时支持多种封锁粒度供不同的 事务选择;
粒度的选择因素:封锁开销、并发度 粒度的选择标准
处理单个关系大量元组→关系为封锁粒度; 处理多个关系大量元组→数据库为封锁粒度; 处理少量元组→元组为封锁粒度。
插入的情况:T1按一定条件从数据库中读数 据记录,T2又插入满足相同条件的记录,T1 再读时发现记录多了。
8.1 并发控制概述
3、读“脏”数据
T1读C,将B*2写回;
T2读C;
读取了无效的数据
T1事务回滚,恢复为原来的值;
8.1 并发控制概述
3、读“脏”数据
T1修改了某一数据; T2读取了它; T1因为某种原因而撤消了;
不同的级别达到的系统一致性级别不同。
一、一级封锁协议
事务的结束:
正常结束commit: 非正常结束rollback:
定义:
事务T在修改数据R之前必须对其先加X锁, 直到T结束才释放。
作用:
可解决:丢失修改的问题。 不能解决:不可重复读和读“脏”数据的问
题。
二、二级封锁协议
理论上:在某一事务执行时,禁止其他事 务的执行。
实际中使用的方法:
时标法、乐观法 两段锁(2PL):
8.6 两段锁协议
定义:
所有事务必须分两个阶段对数据项加锁和解 锁。
具体内容:
在对任何数据进行读、写操作之前,首先要 申请并获得对该数据的封锁。
Байду номын сангаас在释放一个封锁之前,事务不再申请和获得 任何其他封锁。
第八章 并发控制
概述、封锁 封锁协议 活锁和死锁 并发调度的可串行性 两段锁协议 封锁的粒度
总述
数据库→并发资源 串行执行:会浪费很多资源 并行执行:充分利用资源 单处理机系统:→交叉并发
并行的操作轮流交叉执行; 并没有真正并行运行,减少空闲时间
多处理机系统:→同时并发
定义:
一级封锁协议加上事务T在读取数据R之前必 须先对其加S锁,读取之后释放S锁。
作用:
解决:防丢失修改、防读“脏”数据 不能解决:不可重复读
三、三级封锁协议
定义
一级封锁协议加上事务T在读取数据R之前必 须先对其加S锁,直到事务结束才释放。
作用:
解决:丢失修改、读“脏”数据、不可重复 读。