【教学课件】第八章并发控制.ppt
第八章 并发控制,8.1 并发控制概述8.2 封锁8.3 封锁协议8.4 活锁和死锁8.5 并发调度的可串行性8.6 两段锁协议8.7 封锁的粒度8.8 Oracle的并发控制8.9 小结,8.6 两段锁协议,两段锁协议的内容1.在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁2.在释放一个封锁之后,事务不再获得任何其他封锁。,两段锁协议(续),“两段”锁的含义事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段;第二阶段是释放封锁,也称为收缩阶段。,两段锁协议(续),例:事务1的封锁序列:Slock A.Slock B.Xlock C.Unlock B.Unlock A.Unlock C;事务2的封锁序列:Slock A.Unlock A.Slock B.Xlock C.Unlock C.Unlock B;事务1遵守两段锁协议,而事务2不遵守两段协议。,两段锁协议(续),并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。所有遵守两段锁协议的事务,其并行执行的结果一定是正确的事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件可串行化的调度中,不一定所有事务都必须符合两段锁协议。,两段锁协议(续),T1Slock B读B=2Y=BXlock AA=Y+1写回A=3Unlock BUnlock A,T2Slock A 等待 等待 等待 等待 等待Slock A读A=3Y=A Xlock BB=Y+1写回B=4Unlock BUnlock A,T1Slock B读B=2Y=BUnlock BXlock AA=Y+1写回A=3Unlock A,T2Slock A等待等待等待等待Slock A读A=3X=AUnlock AXlock BB=X+1写回B=4Unlock B,(a)遵守两段锁协议,(b)不遵守两段锁协议,T1Slock B读B=2Y=BUnlock BXlock AA=Y+1写回A=3Unlock A,T2Slock A读A=2X=AUnlock AXlock B等待Xlock BB=X+1写回B=3Unlock B,(c)不遵守两段锁协议,两段锁协议(续),两段锁协议与防止死锁的一次封锁法一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁,两段锁协议(续),图8.7 遵守两段锁协议的事务发生死锁,T1Slock B读B=2Xlock A等待等待,T2Slock A读A=2Xlock A等待,两段锁协议(续),两段锁协议与三级封锁协议两类不同目的的协议两段锁协议保证并发调度的正确性三级封锁协议在不同程度上保证数据一致性遵守第三级封锁协议必然遵守两段协议,第八章 并发控制,8.1 并发控制概述8.2 封锁8.3 封锁协议8.4 活锁和死锁8.5 并发调度的可串行性8.6 两段锁协议8.7 封锁的粒度8.8 Oracle的并发控制8.9 小结,8.7 封锁的粒度,8.7.1 封锁粒度8.7.2 多粒度封锁8.7.3 意向锁,8.7.1 封锁粒度,一、什么是封锁粒度二、选择封锁粒度的原则,一、什么是封锁粒度,X锁和S锁都是加在某一个数据对象上的封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象:逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等物理单元:页(数据页或索引页)、物理记录等,什么是封锁粒度(续),封锁对象可以很大也可以很小 例:对整个数据库加锁 对某个属性值加锁封锁对象的大小称为封锁的粒度(Granularity)多粒度封锁(multiple granularity locking)在一个系统中同时支持多种封锁粒度供不同的事务选择,8.7.1 封锁粒度,一、什么是封锁粒度二、选择封锁粒度的原则,二、选择封锁粒度的原则,封锁的粒度越 大,小,系统被封锁的对象 少,多,并发度 小,高,系统开销 小,大,选择封锁粒度:考虑封锁机构和并发度两个因素对系统开销与并发度进行权衡,选择封锁粒度的原则(续),需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;需要处理大量元组的用户事务:以关系为封锁单元;只处理少量元组的用户事务:以元组为封锁单位,8.7 封锁的粒度,8.7.1 封锁粒度8.7.2 多粒度封锁8.7.3 意向锁,8.7.2 多粒度封锁,多粒度树以树形结构来表示多级封锁粒度根结点是整个数据库,表示最大的数据粒度叶结点表示最小的数据粒度,多粒度封锁(续),例:三级粒度树。根结点为数据库,数据库的子结点为关系,关系的子结点为元组。,多粒度封锁协议,允许多粒度树中的每个结点被独立地加锁对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁,显式封锁和隐式封锁,显式封锁:直接加到数据对象上的封锁隐式封锁:由于其上级结点加锁而使该数据对象加上了锁显式封锁和隐式封锁的效果是一样的,对某个数据对象加锁时系统检查的内容,该数据对象有无显式封锁与之冲突 所有上级结点检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点封锁造成的)所有下级结点看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。,8.7 封锁的粒度,8.7.1 封锁粒度8.7.2 多粒度封锁8.7.3 意向锁,8.7.3 意向锁,引进意向锁(intention lock)目的提高对某个数据对象加锁时系统的检查效率,什么是意向锁,对任一结点加基本锁,必须先对它的上层结点加意向锁如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁,意向锁(续),例:对任一元组 r 加锁,先关系R加意向锁 事务T要对关系R加X锁,系统只要检查根结点数据库和关系R是否已加了不相容的锁,不需要搜索和检查R中的每一个元组是否加了X锁,常用意向锁,意向共享锁(Intent Share Lock,简称IS锁)意向排它锁(Intent Exclusive Lock,简称IX锁)共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁),意向锁(续),IS锁如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。例:要对某个元组加S锁,则要首先对关系和数据库加IS锁,意向锁(续),IX锁如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。例:要对某个元组加X锁,则要首先对关系和数据库加IX锁。,意向锁(续),SIX锁如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例:对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。,意向锁(续),意向锁的相容矩阵 T1 T2 S X IS IX SIX-S Y N Y N N Y X N N N N N Y IS Y N Y Y Y Y IX N N Y Y N Y SIX N N Y N N Y-Y Y Y Y Y Y,意向锁(续),锁的强度锁的强度是指它对其他锁的排斥程度一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然,意向锁(续),具有意向锁的多粒度封锁方法申请封锁时应该按自上而下的次序进行;释放封锁时则应该按自下而上的次序进行 例:事务T要对一个数据对象加锁,必须先对它的上层结点加意向锁,第八章 并发控制,8.1 并发控制概述8.2 封锁8.3 封锁协议8.4 活锁和死锁8.5 并发调度的可串行性8.6 两段锁协议8.7 封锁的粒度8.8 Oracle的并发控制8.9 小结,8.8 Oracle的并发控制,Oracle采用封锁技术保证并发操作的可串行性 Oracle锁的种类字典锁数据锁(亦称DML锁),1.字典锁,ORACLE DBMS内部用于对字典表的封锁由DBMS在必要的时候自动加锁和释放锁,用户无权控制字典锁类型语法分析锁DDL锁,2.数据锁,数据锁类型共享锁(S锁)排它锁(X锁)行级共享锁(RS锁)行级排它锁(RX锁)共享行级排它锁(SRX锁)其中RS锁、RX锁、SRX锁实际上就是IS锁、IX锁、SIX锁。,数据锁(续),封锁粒度行级表级,数据锁(续),数据锁的相容矩阵 T1 T2 S X RS RX SRX-S Y N Y N N Y Y=Yes,表示相容的请求 X N N N N N Y RS Y N Y Y Y Y N=No,表示不相容的请求 RX N N Y Y N Y SRX N N Y N N Y-Y Y Y Y Y Y,数据锁(续),数据封锁的两种方式数据封锁由系统控制,对用户是透明的允许用户用LOCK TABLE语句显式对封锁对象加锁,数据锁(续),ORACLE数据锁的特点缺省情况下,读数据不加锁ORACLE通过回滚段(Rollback Segment)来保证用户不读“脏”数据和可重复读。优点:提高数据的并发度,数据锁(续),死锁采用死锁诊断与解除法周期性诊断系统中有无死锁存在死锁,则撤消执行更新操作次数最少的事务,第八章 并发控制,8.1 并发控制概述8.2 封锁8.3 封锁协议8.4 活锁和死锁8.5 并发调度的可串行性8.6 两段锁协议8.7 封锁的粒度8.8 Oracle的并发控制8.9 小结,8.9 小结,数据共享与数据一致性是一对矛盾数据库的价值在很大程度上取决于它所能提供的数据共享度。数据共享在很大程度上取决于系统允许对数据并发操作的程度。数据并发程度又取决于数据库中的并发控制机制另一方面,数据的一致性也取决于并发控制的程度。施加的并发控制愈多,数据的一致性往往愈好。,小结(续),数据库的并发控制以事务为单位数据库的并发控制通常使用封锁机制两类最常用的封锁不同级别的封锁协议提供不同的数据一致性保证,提供不同的数据共享度。三级封锁协议,小结(续),并发控制机制调度并发事务操作是否正确的判别准则是可串行性并发操作的正确性则通常由两段锁协议来保证。两段锁协议是可串行化调度的充分条件,但不是必要条件,小结(续),对数据对象施加封锁,带来问题活锁:先来先服务 死锁:预防方法一次封锁法顺序封锁法 死锁的诊断与解除超时法等待图法,小结(续),不同的数据库管理系统提供的封锁类型、封锁协议、达到的系统一致性级别不尽相同。但是其依据的基本原理和技术是共同的。,