chap09 事务处理
第九章 事务处理提纲并发控制两段锁协议封锁类型显示锁信息锁的实现封锁带来的问题死锁、活锁、阻塞基于时间戳的协议恢复故障日志恢复封锁的定义封锁就是一个事务对某个数据对象加锁,取得对它一定的控制,限制其它事务对该数据对象使用要访问一个数据项R,事务Ti必须先申请对R的封锁,如果R已经被事务Tj加了不相容的锁,则Ti需要等待,直至Tj释放它的封锁两阶段封锁协议Two-Phase Locking Protocol两阶段封锁协议内容增长阶段(Growing Phase)事务可以获得锁,但不能释放锁缩减阶段(Shrinking Phase)事务可以释放锁,但不能获得锁示例 lock-S(A)…lock-S(B)…lock-X(C)…unlock(A)… unlock(C)…unlock(B)遵从两段锁协议 lock-S(A)…unlock-S(A)…lock-S(B)…lock-X(C)… unlock(C)…unlock(B)不遵从两段锁协议两阶段封锁协议封锁点:事务获得其最后封锁的时间若一组事务均服从两阶段封锁协议,则它们的调度一定是可串行化的事务调度等价于和它们的封锁点顺序一致的串行调度t1t3t2T1T2T3两阶段封锁协议令{T0, T1, …,Tn}是参与调度S的事务集,如果Ti对数据项R加A型锁,Tj对数据项R加B型锁,且comp(A, B)=false,若Ti先获得锁,则Ti先于Tj,记作Ti?Tj,得到一个优先图设ti是Ti的封锁点,若Ti?Tj,则titj若{T0, T1, …,Tn}不可串行化,则在优先图中存在环,不妨设为T0?T1?…?Tn?T0,则t0t1…tnt0,矛盾锁持有期保持到事务结束时才释放的锁称作长锁在事务中途就可以释放的锁称作短锁read uncommitted:不申请锁read committed:短S锁repeatable read:长S锁封锁类型基本锁类型X锁和S锁意向锁IS, IX, SIX码范围锁RangeS_S…基本锁类型排它锁(X锁,eXclusive lock)事务T对数据对象R加上X锁,则其它事务对R的任何封锁请求都不能成功,直至T释放R上的X锁;又称写锁申请对R的排它锁:lock-X(R)共享锁(S锁,Share lock)事务T对数据对象R加上S锁,则其它事务对R的X锁请求不能成功,而对R的S锁请求可以成功;又称读锁申请对R的共享锁: lock-S(R)封锁的相容矩阵相容矩阵comp(A,B)请求锁模式A现有锁模式BSXS是否X否否锁转换T1 :read(a1);read(a2);……read(an );write(a1).T2: read(a1);……带有锁转换的两段锁协议增长阶段可获得lock-S可获得lock-X可将lock-S升级为lock-X (upgrade)缩减阶段可释放lock-S可释放lock-X可将lock-X降级为lock-S (downgrade)T1T2lock-S(a1)lock-S(a1)lock-S(a2)……lock-S(an)unlock(a1)upgrade(a1)更新锁 T1 :read(a1);……write(a1).T2 :read(a1);……write(a1).更新锁(U锁,Update lock)当一个事务查询数据以便要进行修改时,可以对数据项施加更新锁,如果事务修改资源,则更新锁会转换为排它锁。一次只有一个事务可以获得资源上的更新锁,它允许其它事务对资源的共享式访问但阻止排他式的访问。更新锁相容矩阵comp(A,B)请求锁模式A现有锁模式BSXUS是否是X否否否U是否否封锁粒度封锁对象属性值、属性值集合、元组、关系、某索引项、整个索引、整个数据库、物理页、块封锁粒度大,则并发度低,封锁机构简单,开销小 封锁粒度小,则并发度高,封锁机构复杂,开销高理想的情况是只封锁与规定的操作有关的的数据对象,称之为事务的完整性相关域T2: lock-x(page1)T1: lock-s(row1)封锁粒度教学楼教室座位封锁粒度意向(预约)封锁在分层封锁中,封锁了上层节点就意味着封锁了所有内层节点。如果有事务T1对某元组加了S锁,而事务T2对该元组所在的关系加了X锁,因而隐含地X封锁了该元组,从而造成矛盾引入意向锁I(Intend):当为某节点加上I锁,表明其某些内层节点已发生事实上的封锁,防止其它事务再去显式封锁该节点I锁的实施是从封锁层次的根开始,依次占据路径上的所有节点,直至要真正进行显式封锁的节点的父节点为止lock-I(tableA)lock-I(pageB)lock-S(rowC)T2: lock-s(row1)T1: lock-s(page1)封锁粒度相容矩阵comp(A,B)请求锁模式A现有锁模式BIXSI是否否X否否否S否否是
原创力文档

文档评论(0)