事务处理事务处理--锁锁提纲提纲并发控制并发控制基于锁的协议两段锁协议多粒度封锁带来的问题恢复恢复故障日志恢复封锁的定义封锁的定义封锁就是一个事务对某个数据对象加锁,取封锁就是一个事务对某个数据对象加锁,取得对它一定的控制,限制其它事务对该数据得对它一定的控制,限制其它事务对该数据对象使用对象使用要访问一个数据项要访问一个数据项RR,事务,事务TiTi必须先申请必须先申请对对RR的封锁,如果的封锁,如果RR已经被事务已经被事务TjTj加了不加了不相容的锁,则相容的锁,则TiTi需要等待,直至需要等待,直至TjTj释放它释放它的封锁的封锁封锁的类型封锁的类型排它锁排它锁((XX锁,锁,eXclusivelockeXclusivelock))事务T对数据对象R加上X锁,则其它事务对R的任何封锁请求都不能成功,直至T释放R上的X锁;又称写锁申请对R的排它锁:lock-X(R)共享锁共享锁((SS锁,锁,SharelockSharelock))事务T对数据对象R加上S锁,则其它事务对R的X锁请求不能成功,而对R的S锁请求可以成功;又称读锁申请对R的共享锁:lock-S(R)封锁的相容矩阵封锁的相容矩阵不相容请求相容请求T1T2XSXNNSNY两阶段封锁协议两阶段封锁协议Two-PhaseLockingProtocolTwo-PhaseLockingProtocol两阶段封锁协议内容两阶段封锁协议内容增长阶段(GrowingPhase)事务可以获得锁,但不能释放锁缩减阶段(ShrinkingPhase)事务可以释放锁,但不能获得锁示例示例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)不遵从两段锁协议两阶段封锁协议两阶段封锁协议封锁点:事务获得其最后封锁的时间封锁点:事务获得其最后封锁的时间事务调度等价于和它们的封锁点顺序一致的串事务调度等价于和它们的封锁点顺序一致的串行调度行调度令{T0,T1,…,Tn}是参与调度S的事务集,如果Ti对数据项R加A型锁,Tj对数据项R加B型锁,且comp(A,B)=false,则称Ti先于Tj,记作TiTj,得到一个优先图设ti是Ti的封锁点,若TiTj,则ti