




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 并发控制,概述、封锁 封锁协议 活锁和死锁 并发调度的可串行性 两段锁协议 封锁的粒度,总述,数据库并发资源 串行执行:会浪费很多资源 并行执行:充分利用资源 单处理机系统:交叉并发 并行的操作轮流交叉执行; 并没有真正并行运行,减少空闲时间 多处理机系统:同时并发 多个事务的真正并行运行 并发控制机制数据库系统中衡量的标志,8.1 并发控制概述,事务:并发控制的基本单位:ACID特性 破坏ACID的原因: 多个事务对数据库的并发操作 解决的方法:对并发控制进行正确调度 简单的例子:售票系统 不一致性的三种类型 丢失修改、不可重复读、读“脏”数据,8.1 并发控制概述,1、丢失修改 T
2、1读入A; T2读入A; T1修改结果,并提交; T2修改结果,并提交; T1对数据的修改被丢失了。,8.1 并发控制概述,丢失修改的具体表现 T1和T2同时读入同一数据,并进行修改; T1先提交修改结果; T2在提交修改结果; T1对数据的修改被丢失了。,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再读发现有些
3、记录没了; 插入的情况:T1按一定条件从数据库中读数据记录,T2又插入满足相同条件的记录,T1再读时发现记录多了。,8.1 并发控制概述,3、读“脏”数据 T1读C,将B*2写回; T2读C; T1事务回滚,恢复为原来的值;,读取了无效的数据,8.1 并发控制概述,3、读“脏”数据 T1修改了某一数据; T2读取了它; T1因为某种原因而撤消了; 产生数据不一致的根本原因 并发操作破坏了事务的隔离性 实现并发控制的主要技术封锁locking,8.2 封锁,封锁的定义: 事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁; 加锁后的事务T就有可该数据对象进行一定控制; 在事务T释放锁之前
4、,其他事务不能更新此数据对象。,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锁 保证了其它事务可以读A,但在T释放S锁之前不能对A做修改。,8.2 封锁,X锁和S锁的相容性,已加 的锁,要加的锁,8.3 封锁协议,封锁协议 规定何时申请X锁或S锁、持锁时间、何时释放等。 三级封锁协议 在三个级别上解决:
5、丢失修改、不可重复读和读“脏”数据等问题。 不同的级别达到的系统一致性级别不同。,一、一级封锁协议,事务的结束: 正常结束commit: 非正常结束rollback: 定义: 事务T在修改数据R之前必须对其先加X锁,直到T结束才释放。 作用: 可解决:丢失修改的问题。 不能解决:不可重复读和读“脏”数据的问题。,二、二级封锁协议,定义: 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读取之后释放S锁。 作用: 解决:防丢失修改、防读“脏”数据 不能解决:不可重复读,三、三级封锁协议,定义 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。 作用: 解决:丢失
6、修改、读“脏”数据、不可重复读。,封锁协议总述,三级协议的区别 什么操作需要申请封锁 何时释放锁,8.4 活锁和死锁,情况和OS中的类似。 活锁:永远等待(分配不公) T1封锁了R:T2请求R, T3也请求R; T1结束释放T3,T3结束又释放了T4; T2永远在等待。 死锁:永远不能结束(互相等待) T1封锁了R1,T1又请求R2; T2已封锁了R2,T2又请求R1;,8.4 活锁和死锁,活锁的处理方法:排队机制 死锁的处理方法:和OS中类似 死锁的预防: 一次封锁法:要求每个事务必须一次将所有要使用的数据都加锁。 存在的问题:扩大了封锁的范围,会有新的封锁要求。 顺序封锁法:预先对数据对象
7、规定一个封锁顺序。 存在的问题:数据对象极多维护困难,很难预先确定每个事务要封锁的对象。,8.4 活锁和死锁,死锁的处理方法: 死锁的诊断与解除 超时法:如果一个事务的等待超过一定时限。 缺点:时限很难选取。 事务等待图法:一个有向图G=(T,U),T(事务)为结点集,U(等待情况)为边的集合。并发控制子系统周期性检查图,看有无回路。 死锁的解除:选择一个死锁代价最小的事务,撤消,让其重新执行。,8.5 并发调度的可串行性,可串行化的调度: 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。 可串行性:是并发事务正确性的准则 一个给定的并发调度,当且仅当它是可串
8、行化的,才认为是正确调度。,8.5 并发调度的可串行性,DBMS的并发机制必须提供一定地保证调度可串行化的手段。 理论上:在某一事务执行时,禁止其他事务的执行。 实际中使用的方法: 时标法、乐观法 两段锁(2PL):,8.6 两段锁协议,定义: 所有事务必须分两个阶段对数据项加锁和解锁。 具体内容: 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。 在释放一个封锁之前,事务不再申请和获得任何其他封锁。,8.6 两段锁协议,含义:事务分两个阶段 1、获得封锁(扩展阶段):事务可以申请获得任何数据项上的任何类型的锁;不能释放任何锁。 2、释放封锁(收缩阶段):事务可以释放任何数据项
9、上的任何类型的锁;不能再申请任何锁。,事务尊守两段锁协议,可串行化调度,充分条件,不是必要条件,两段锁协议和一段锁协议的比较,不同点: 一段锁协议:必须一次性将所有要使用的数据全部加锁; 两段锁协议:不要求一次全部加锁, 一段锁协议:是两段锁协议的特例,它不会产生死锁; 两段锁协议:可能会产生死锁。书上图87,8.7 封锁的粒度,封锁粒度(granularity):封锁对象的大小 封锁对象: 逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引、整个数据库; 物理单元:页、块 封锁的粒度和并发控制的开销相关 粒度大并发度小系统开销小; 粒度小并发度大 系统开销大;,一个系统中 很难选择
10、,8.7 封锁的粒度,多粒度封锁 在一个系统中同时支持多种封锁粒度供不同的事务选择; 粒度的选择因素:封锁开销、并发度 粒度的选择标准 处理单个关系大量元组关系为封锁粒度; 处理多个关系大量元组数据库为封锁粒度; 处理少量元组元组为封锁粒度。,8.7.1 多粒度封锁,多粒度树: 根结点(整个数据库):最大的数据粒度; 叶结点:最小的数据粒度; 多粒度封锁协议: 允许多粒度树种的每个结点被独立地加锁; 对一个结点加锁对后裔结点加锁; 显式封锁、隐式封锁。,8.7.1 多粒度封锁,两种封锁方式: 显式封锁:应事务的要求直接加到数据对象上的封锁; 隐式封锁:没有对该数据对象独立加锁,因为对其上级结点加锁,而导致的加锁。 存在的问题 对数据对象加锁时,需要对其上级和下级对象进行检查,看是否有冲突。,8.7.2 意向锁,定义: 如果对一个结点加意向锁,则说明对该结点的下层结点正在被加锁; 对任一结点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论