第11并发控制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在事务的调度中,如果两个事务都需要操作一个数据,在 什么情况下可以并发执行,在什么情况下不能并发执行?
若两个事务都是读同一个数据,则可以并发执行,否则 就不能并发执行。
因此,存在两个事务T1和T2,如果其中一个已经为某数 据加锁,另一个事务是否可以对该数据申请加锁,如下表 所示(相容矩阵)。
T1 T2 X
R(B)=100
BB*2
W(B)=200
R(A)=50
R(B)= 对)
看下例:
第4页/共36页
第十一章并发控制
例3:
T1
T2
R(C )=100 CC*2 W(C )=200
R(C )=200
故障,回滚 ROLLBACK C恢复为100
发生的现象是什么?
T2读取了不正确的数据 ——读“脏”数据
– 本章的主要内容。
首先,考察在并发执行时,如果事务的一致性被 破坏,具体会发生怎样的现象?
第2页/共36页
第十一章并发控制
例1:在飞机订票系统中,售票点甲(事务T1)读出某航班的机票余
额A,设A=16;售票点乙(事务T2)读出该航班的机票余额A也应该 为16;现在售票点甲(事务T1)卖出一张机票,在此同时售票点乙(事 务T2)也卖出一张机票,T1和T2的调度如下:
例2:
T1 R(A)=50 R(B)=100 求和=150
R(A)=50 R(B)=200 和=250 (验算结果不 对)
T2
R(B)=100 BB*2 W(B)=200
限制T2对数据的写,但T2 可以读数据,why?
因为T1也只是读数据。
第8页/共36页
第十一章并发控制
例3:
T1
T2
R(C )=100 CC*2 W(C )=200
第十一章并发控制
主要内容
• 问题 • 封锁 • 活锁和死锁 • 两段锁协议 • 封锁的粒度
第1页/共36页
第十一章并发控制
问题
• 事务的特性是什么? • 事务的调度是什么,事务为什么要并发调度,n个事务
的并发调度有几种,哪些是正确的,哪些破坏事务的特 性,如何判断?
• 并发执行可能破坏事务的哪些特性? • 一旦出现了可能破坏事务特性的调度时应该如何控制?
前面3个例第1子0页T/共13应6页该给数据加什么锁?
第十一章并发控制
例1:
T1
T2
R(A)=16
R(A)=16
AA-1
W(A)=15
AA-1
W(A)=15
T1给数据加X锁。
•此时,T2能否与T1并发执行?
•不能,因为在T1操作数据A 的同时,限制了事务T2的执 行。
第11页/共36页
第十一章并发控制
前面3个例子中事务T1应该限制T2对数据进行的哪些操作?
第6页/共36页
第十一章并发控制
例1:
T1
T2
R(A)=16
R(A)=16
AA-1
W(A)=15
AA-1
W(A)=15
限制T2对A读和写
原因是T1需要对数据进行修 改,其他任何事务在此期间对 数据的读/写都可能导致错误。
第7页/共36页
第十一章并发控制
若事务T1仅读数据A,则T1限制T2对数据的写操作,但是 T2可以读数据A——共享锁(读锁或S锁)。
因此:
如果事务T1对数据加上了X锁,则事务T1可以读/写该数 据,其他事务不能读/写该数据。
如果事务T1对数据加上了S锁,则事务T1可以读该数据,
其他事务可以读该数据,所有事务(包括T1都不能写该数
据)。
S
-
X
N
N
Y
S
N
Y
Y
-
Y
Y
Y
第14页/共36页
第十一章并发控制
思考:假设有一个数据A,系统不断的产生操作数据A的 事务,此时会发生怎样的情况?
可能的执行过程如下:
第15页/共36页
第十一章并发控制
1、事务T1先操作数据A, T2,T3,…,Ti…等待;
2、T1完成后,T3操作数据A, T2,T4,…,Ti…等待;
第十一章并发控制
例3:
T1
T2
R(C )=100 CC*2 W(C )=200
R(C )=200
故障,回滚 ROLLBACK C恢复为100
T1给数据加X锁。
•此时,T2能否与T1并发执行? •不能,因为在T1操作数据A 的同时,限制了事务T2的执 行。
因此,可以得出下述结论:
第13页/共36页
第十一章并发控制
R(C )=200
故障,回滚 ROLLBACK C恢复为100
限制T2对数据的读/写
原因是T1需要对数据进行修 改,其他任何事务在此期间对 数据的读/写都可能导致错误。
因此得到的结论如下:
第9页/共36页
第十一章并发控制
设存在2个事务T1和T2,以及数据A。
若事务T1需要对数据A进行修改,则T1必须限制T2对数据 的所有操作——排它锁(写锁或X锁)。
3、T3完成后,T4操作数据A, T2,T5,…,Ti…等待; …… 结果是T2一直在等待,没有机会执行。 该种现象称为活锁。
解决方法:对请求操作的事务进行排队(放在一个队列结 构中),并按照队列的先进先出的原则实行先来先服务的 原则。
第十一章并发控制
在系统中可以采用怎样的技术来 控制上述3种情况的发生? ——封锁。
第5页/共36页
第十一章并发控制
11.2封锁
• 事务在并发执行中,出现丢失修改、不可重 复读和读“脏” 数据的最基本的原因是什么?
一个事务在使用一个数据的同时,另一个事务也使用该数据。 如果能做到使每一个数据在任何时刻总是由一个事务在使用,是 否可以避免上述现象? 如果事务在对某个数据对象(表、记录等)操作之前,先向系统发 出请求,对其进行加锁,限制其他事务对该数据的使用。直到该 事务实行完毕,再打开对数据的封锁,其他事务才可以对该数据 进行操作。——封锁。
例2:
T1 R(A)=50 R(B)=100 求和=150
R(A)=50 R(B)=200 和=250 (验算结果不 对)
T2
R(B)=100 BB*2 W(B)=200
T1给数据加S锁。 •此时,T2能否与T1并发执 行? •不能,因为在T1读数据A和 B的同时,限制了事务T2对 数据B的写。
第12页/共36页
T1
T2
R(A)=16
R(A)=16
AA-1
发生怎样的现象? 丢失了对数据的修改。
W(A)=15 AA-1 W(A)=15
看下例:
第3页/共36页
第十一章并发控制
例2:现存在两个事务的调度如下:
T1 R(A)=50
T2
结论:一个事务不能重复读取
同一个数据。——不可重复读。
R(B)=100
求和=150