数据库封锁技术演示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

封锁技术
6. 活锁和死锁
死锁预防方法:用一些措施来避免死锁的发生 (1)一次封锁法:每个事务提前将所需的数据全部加锁。 (2)顺序封锁法:预先规定一个封锁顺序,所有事务必须按 此顺序对数据进行封锁。 例如在例1中,若T1、T2都以R1R2的顺序申请封锁, T1 T2 则不会发生死锁。
Xlock R1 Xlock R2 Unlock R1
封锁技术
1. 锁的类型和作用
封锁的种类和作用:
排它锁:又称写锁、X锁 共享锁:又称读锁、S锁
若事务T对数据A加上X锁,则其它事务不能取 得A的任何封锁(也就不能对A进行任何操作), 直到T释放A上的X锁。
事务T 事务U
Xlock A 更新A Unlock A A
S
Slock A Waiting… 获得S锁 读A
封锁技术
1. 锁的类型和作用
封锁的种类和作用:
排它锁:又称写锁、X锁 共享锁:又称读锁、S锁
若事务T对数据A加上S锁,则其它事务只能取 得A的S锁(即可以读A),不能取得X锁,直到T 释放A上的S锁。
事务T 事务U
Slock A 读A Unlock A A
S S
Slock A 读A Xlock A 要将S锁升级为X锁 Waiting…
事务2
事务1
t1: Slock B 读B Unlock B Xlock A t3: AB+1 写A Unlock A
事务2
t2: Slock A 等待…
t2: Slock A 等待…
t4: 取得A的S锁 读A Xlock B B=A+1 写B Unlock B Unlock A
t3: 取得A的S锁 读A Unlock A Xlock B B=A+1 写B Unlock B
X
只要在锁释放之前有高优先级的事务申请锁,低优先级的事 务将得不到锁,当事务繁忙时可能永远得不到锁活锁。
封锁技术
6. 活锁和死锁
锁的使用可以保证并发操作的一致性,但是也会引起两个 新问题:活锁和死锁。 (1)活锁:先看一个例子:多个事务按优先级获取锁 避免活锁的方法: 1)先来先服务: 按申请的先后顺序分配锁。 2)动态优先级: 事务等待的时间越长,其优先级越高。
封锁技术
6. 活锁和死锁
锁的使用可以保证并发操作的一致性,但是也会引起两个 新问题:活锁和死锁。 (1)活锁:先看一个例子:多个事务按优先级获取锁 (2)死锁: 先看两个例子。例1: R1 T1 T2 R2 封锁 R1 申请 狭路相逢 T1 申请 R2 T2 封锁 等待T2释放R2
T1
等待T1释放R1 事务等待图
能释放任何已取得的封锁。 收缩阶段(释放封锁阶段):事务可以释放封锁,但不 能申请新的封锁。 可以证明: 若所有事务均遵守两段封锁协议,则这些事务的所有调 度都是可串行化的; 但是调度的可串行化并不要求所有事务都必须遵守两段 封锁协议。 例如:
封锁技术
5. 两段封锁协议
事务1
t1: Slock B 读B Xlock A t3: AB+1 写A Unlock B Unlock A
T1: Slock A…Slock B…Xlock C …… Unlock B…Unlock A…Unlock C T2: Slock A…Unlock A…Slock B……Xlock C…Unlock C…Unlock B
T1遵守两段封锁协议
T2不遵守两段封锁协议
封锁技术
5. 两段封锁协议
内容:每个事务都分成两个阶段: 扩展阶段(申请封锁阶段):事务可以申请封锁,但不
封锁技术
6. 活锁和死锁
死锁预防方法:用一些措施来避免死锁的发生 (1)一次封锁法:每个事务提前将所需的数据全部加锁。 如T1一次将R1、R2都加锁,故T1执行完T2才能加锁。 优点:可避免死锁的发生; 缺点:1)提前封锁需要访问的所有数据,扩大了封锁的 时间范围,降低系统的并发度; 2)封锁所有可能需要访问的数据,扩大了封锁的 空间范围,进一步降低系统的并发度。
封锁技术
1. 锁的类型和作用
封锁的种类和作用:
排它锁:又称写锁、X锁 共享锁:又称读锁、S锁
若事务T对数据A加上S锁,则其它事务只能取 得A的S锁(即可以读A),不能取得X锁,直到T 释放A上的S锁。
事务T 事务U
Slock A 读A Unlock A A
X
Slock A 读A Xlock A 要将S锁升级为X锁 Waiting… 获得X锁
封锁技术
6. 活锁和死锁
锁的使用可以保证并发操作的一致性,但是也会引起两个 新问题:活锁和死锁。 (1)活锁:先看一个例子:多个事务按优先级获取锁
T1 T2(优先级最低) Xlock R 等待 T3 T4 Xlock R Unlock R X
Xlock R 等待 获得锁 Unlock R
X
Xlock R 等待 获得锁
如何决定封锁粒度:封锁粒度越大,系统中被封锁
的对象总数就越少,层次就越高,并发度越小,系统 的开销也越小;反之,系统中被封锁的对象总数就越 多,层次就越低,并发度越高,系统的开销也越大;
封锁技术
4. 封锁协议
封锁的种类和作用
封锁的相容矩阵 封锁的粒度 封锁协议:封锁规则的集合,约定: 何时申请X锁和S锁 持锁时间
封锁技术
1. 锁的类型和作用
封锁的种类和作用:
排它锁:又称写锁、X锁 共享锁:又称读锁、S锁
若事务T对数据A加上S锁,则其它事务只能取 得A的S锁(即可以读A),不能取得X锁,直到T 释放A上的S锁。
事务T 事务U
Slock A 读A Unlock A A
S
Slock A 读A Xlock A 要将S锁升级为X锁 Waiting… 获得X锁
T2
事务资源图 T1和T2都不能继续,这就是死锁。
封锁技术
6. 活锁和死锁
R1 锁的使用可以保证并发操作的一致性,但是也会引起两个 三叉路口 T1 新问题:活锁和死锁。 (1)活锁:先看一个例子:多个事务按优先级获取锁 (2)死锁: 先看两个例子。例2: 申请 等待T2 封锁 R1 T2 释放R2 T2 封锁 等待T1 释放R1 T1 R2 T3 T1 T3 申请 R3 等待T3释放R3 申请 封锁 事务等待图 事务资源图
T1、T2、T3都不能继续,发生死锁。
封锁技术
6. 活锁和死锁
锁的使用可以保证并发操作的一致性,但是也会引起两个 新问题:活锁和死锁。 (1)活锁:先看一个例子:多个事务按优先级获取锁 (2)死锁的定义: 两个或两个以上的事务处于等待状态,每个事务都在等 待其中另一个事务释放封锁,它才能继续,结果所有事务都 不能继续,这种现象称为死锁。 (3)死锁的解决方法: 1) 死锁预防:用一些措施来避免死锁的发生 2) 死锁诊断与解除:允许死锁发生,定期检测是否发生 了死锁,若是则解除之
何时释放锁
目的在于保证调度的正确性。 目前有: 1)三级封锁协议:在不同层度上解决丢失修 改、不可重复读、读“脏”数据问题(略) ;
封锁技术
5. 两段封锁协议
内容:每个事务都分成两个阶段: 扩展阶段(申请封锁阶段):事务可以申请封锁,但不
能释放任何已取得的封锁。 收缩阶段(释放封锁阶段):事务可以释放封锁,但不 能申请新的封锁。 例如:
Xlock R1
等待… 获得R1的锁 Xlock R2 等待… 获得R2的锁
Unlock R2
封锁技术
6. 活锁和死锁
死锁预防方法:用一些措施来避免死锁的发生 (1)一次封锁法:每个事务提前将所需的数据全部加锁。 (2)顺序封锁法:预先规定一个封锁顺序,所有事务必须按 此顺序对数据进行封锁。 优点:可避免死锁的发生; 缺点:数据库对象很多,并且经常更新,很难预先确定 所有的访问对象。 死锁诊断与解除方法: (1)死锁诊断:检查事务等待图,若存在回路,则发生死锁 (2)死锁解除:撤销代价最小的事务,释放它持有的锁。
封锁技术
2. 封锁的相容矩阵
封锁的种类和作用
封锁的相容矩阵:
T1持有 T2请求 X S
X
N N
S
N Y

Y Y

Y
Y
Y
封锁技术
3. 封锁的粒度
封锁的种类和作用
封锁的相容矩阵 封锁的粒度:封锁对象的大小。
封锁对象:数据库、表、元组、列、索引项、索引,
也可以是数据存放的物理单元:页、块等。
封锁技术
1. 锁的类型和作用
封锁的种类和作用:
排它锁:又称写锁、X锁 共享锁:又称读锁、S锁
若事务T对数据A加上X锁,则其它事务不能取 得A的任何封锁(也就不能对A进行任何操作), 直到T释放A上的X锁。
事务T 事务U
XlocΒιβλιοθήκη Baidu A 更新A Unlock A A
X
Slock A Waiting…
相关文档
最新文档