5.05 Locking Protocol 加锁协议
1 5.05 Locking Protocol 加锁协议
● 实际运行时,不可能事先 规定一个事务集,提供一个 调度交系统执行。而且DBMS 对事务的调度受制于0$对事 务的调度。 ●较实际的办法是要求DBMS按一定的协议控制 事务执行。从而控制并发事务的操作按可串 行化方式执行。而不必关心具体的调度。 DBMS控制并发事务的操作按可串行化方式执 行,最通用的方法是加锁。 为保证调度执行的可串行化,加锁须遵守一 定的协议,叫加锁协议
2 ⚫ 实际运行时,不可能事先 规定一个事务集,提供一个 调度交系统执行。而且DBMS 对事务的调度受制于OS对事 务的调度。 ⚫ 较实际的办法是要求DBMS 按一定的协议控制 事务执行。从而控制并发事务的操作按可串 行化方式执行。而不必关心具体的调度。 ⚫ DBMS控制并发事务的操作按可串行化方式执 行,最通用的方法是加锁。 ⚫ 为保证调度执行的可串行化,加锁须遵守一 定的协议,叫加锁协议
一.exclusive lock X锁,排他锁。 此协议中,只有一种锁, 即x锁。既用于写操作, 也用于读操作。 一个事务对某数据对象加锁后,其他事务不得对 该数据对象加锁,故称排他锁。 Compatibility matrix相容矩阵。 NL X 请求加锁X Y N ● 列NL一无锁,X一已加锁;行一申请加X锁
3 一.exclusive lock X锁,排他锁。 ⚫ 此协议中,只有一种锁, 即x锁。既用于写操作, 也用于读操作。 ⚫ 一个事务对某数据对象加锁后,其他事务不得对 该数据对象加锁,故称排他锁。 Compatibility matrix相容矩阵。 NL X 请求加锁X Y N ⚫ 列NL—无锁,X—已加锁;行—申请加X锁
Cascading rol lback 连锁卷回 T1,T2两个事务加锁和释放情况: T1 T2 lock(D)方 W1D方 lock(D); unlock(D); 等待 lock (D); R2(D): (rollback unlock (D) 加锁,释放过程
4 Cascading rollback 连锁卷回 ⚫ T1,T2两个事务加锁和释放情况: ⚫ 加锁,释放过程。 T1 T2 . . . lock(D); W1(D); unlock(D); . . . . . . (rollback) . . . . . . lock(D); 等待 lock(D); R2(D); unlock(D); . .
T1因故卷回,T2也被迫卷回。 即使T2已提交也要卷回,因为T2使用了脏数据。 读过T2写入的数据的事务也被迫卷回,还可发 展,造成连锁卷回。 连锁卷回的产生原因:过早地释放锁。 把锁保持到事务结束,则T1结束前其他事务不 能读取加锁数据,而不会产生连锁卷回。原因: 卷回只能在事务结束前发生
5 ⚫ T1因故卷回,T2也被迫卷回。 ⚫ 即使T2已提交也要卷回,因为T2使用了脏数据。 读过T2写入的数据的事务也被迫卷回,还可发 展,造成连锁卷回。 ⚫ 连锁卷回的产生原因:过早地释放锁。 ⚫ 把锁保持到事务结束,则T1结束前其他事务不 能读取加锁数据,而不会产生连锁卷回。原因: 卷回只能在事务结束前发生