数据库原理与设计课件:第9章 并发控制
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一数据并修改
④
– 事务2的提交结果破坏了事务1提
交的结果,导致事务1的修改被丢
失。
R=R-1 写回R=99 提交
2022/2/14
8
2. 不可重复读
不可重复读是事务T1读取数据后,T2对同一数据执行
更新操作,使T1再次读取该数据时,得到与前一次不
同的值。
三类不可重复读:
① T1 读A=50 读B=100 求和=150
可串行化调度的充分条件 – 一个调度S在保证冲突操作的次序不变的情况下, 通 过交换两个事务不冲突操作的次序得到另一个调度 S’ , 如果S’是串行的, 称调度S为冲突可串行化的调度
一个调度是冲突可串行化,一定是状态可串行的(可 串行化的调度)
– 冲突可串行化调度是可串行化调度的充分条件,不 是必要条件
– 但是调度L2是可串行化的 ➢的因值为,L2X执的行值的都结等果于与T调3的度值L1相同,Y的值都等于T2
2022/2/14
24
第9章 并发控制
2022/2/14
2
问题提出
2022/2/14
多事务执行方式(续)
– (1)事务串行执行
– (2)交叉并发方式interleaved concurrency
➢并行事务的并行操作轮流交叉运行
➢是单处理机系统中的并发方式,能够减 少处理机的空闲时间,提高系统的效率
– (3)同时并发方式simultaneous concurrency
第9章 并发控制
问题提出
多用户数据库系统特征 – 允许多个用户同时使用的数据库系统 ➢飞机定票数据库系统 ➢银行数据库系统 – 特点:在同一时刻并发运行的事务数可达数百个
多事务执行方式 – (1)事务串行执行 ➢每个时刻只有一个事务运行,其他事务必须等到 这个事务结束以后方能运行 ➢不能充分利用系统资源和数据库资源
Xlock B
B=X+1
写回B(=4)
Unlock B
(a) 串行调度策略
2022/2正/14确的调度
15
9.2.1 可串行化调度
SlocTk1 B
T2
T1
T2
SlockA
Y=B=2
X=A=2
Unlock B
Unlock A
Xlock A
Xlock B
A=Y+1 写回A(=3)
Unlock A
Slock A
2022/2/14
7
1. 丢失更新
以飞机定票系统为例, – 甲售票点事务T1和乙售票点事务 T2同时读取某航班的机票余额 R=100 ;分别售出1张机票 – 结果明明卖出两张机票,数据库 中机票余额只减少1
T1
T2
① 读R=100
②
读R=100
③ R=R-1
丢失更新是指
写回R=99
– 事务1与事务2从数据库中读入同 提交
➢多处理机系统中,每个处理机可以运行 一个事务,多个处理机可以同时运行多个 事务,实现多个事务真正的并行运行
➢最理想的并发方式受制于硬件环境、更
复杂的机制
3
第9章 并发控制
事务并发执行带来的问题
– 可能会存取和存储不正确的数据,破坏事务的隔离
性和数据库的一致性
– DBMS必须提供并发控制机制
9.1 并发事务运行存在的异常问题
– 一致性状态:数据库中只包含成功事务提交的结果 – 不一致状态:数据库中包含失败事务的结果
2022/2/14
5
(回顾) 事务特征
3. 隔离性 – 对并发执行而言, 一个事务的执行不能被其他事务 干扰
4. 持续性 – 持续性也称永久性(Permanence) – 一个事务一旦提交,它对数据库中数据的改变就应 该是永久性的。接下来的其他操作或故障不应该对 其执行结果有任何影响。
– 并发控制机制要用正确的方式调度并发操作,使一个
用户事务的执行不受其他事务的干扰,避免造成数 据的不一致性
➢保证事务的隔离性
➢保证数据库的一致性
2022/2/14
11
第9章 并发控制
9.1 并发事务运行存在的异常问题 9.2 并发调度的可串行性 9.3 基于封锁的并发控制技术 9.4 多粒度封锁 9.5 基于时间戳协议的并发控制 9.6 基于有效性确认的并发控制 9.7 插入与删除操作对并发控制的影响 9.8 SQL Server中的并发控制 9.9 小结
9.2 并发调度的可串行性
9.3 基于封锁的并发控制技术
9.4 多粒度封锁
9.5 基于时间戳协议的并发控制
9.6 基于有效性确认的并发控制
9.7 插入与删除操作对并发控制的影响
9.8 SQL Server中的并发控制
9.9 小结
2022/2/14
4
(回顾) 事务特征
事务的四个特性:
16
9.2.1 可串行化调度
SlocTk1 B
T2
T1
T2
SlockA
Y=B=2
X=A=2
Unlock B
Unlock A
Xlock A
Xlock B
A=Y+1 写回A(=3)
Unlock A
Slock A
B=X+1 写回B(=3)
Unlock B Slock B
X=A=3 Y=B=3
Unlock A Unlock B
13
可串行化调度
可串行性是并行事务正确性的唯一准则
– 按这个准则规定,一个给定的并发调度,当且仅当 它是可串化的,才认为是正确调度
例:现在有两个事务,分别包含下列操作: 事务1:读B;A=B+1;写回A; 事务2:读A;B=A+1;写回B;
假设A的初值为2,B的初值为2。 – 对这两个事务的不同调度策略
事务并发执行可能会存取和存储不正确的数据, 破坏事务的隔离性和数据库的一致性
2022/2/14
6
9.1 并发事务运行存在的异常问题
并发操作带来的数据不一致性 – 1. 丢失更新(lost update) – 2. 不可重复读(non-repeatable read) – 3. 读“脏”数据(dirty read)
L= R1(A)W1(A)R1(B)W1(B)R2(A)W2(A)R2(B)W2(B) – 因为L等价于一个串行调度T1,T2 – 所以调度S是可串行化的调度 L和S是(冲突)等价的
定义9.4 我们称一个调度是状态可串行的,如果它的状 态等价于一个串行调度。
2022/2/14
22
9.2.3 调度的状态等价性
②
T2
读B=100 B←B*2
事务1读取某一数据后: T2对其做了修改,当T1再次读该数 据时,得到与前一次不同的值 T2删除了其中部分记录,当T1再
次读取数据时,某些记录消失
③ 读A=50 读B=200 求和=250
(验算不对)
2022/2/14
写回B=200
T2插入了一些记录,当T1再次
读C=200
③ ROLLBACK
C恢复为100
2022/2/14
10
9.1 并发事务运行存在的异常问题
并发操作带来的数据不一致性
– 丢失更新(lost update)
– 不可重复读(non-repeatable read)
– 读“脏”数据(dirty read)
这种数据库的不一致性是由并发操作引起的,主要原 因是并发操作破坏了事务的隔离性
– 以不同的顺序串行执行事务也有可能会产生不同的结 果,但由于不会将数据库置于不一致状态,所以都可以 认为是正确的。
定义9.1 多个事务的并发执行是正确的,当且仅当并发 执行的结果与这些事务按某一串行顺序执行的结果相同, 这种调度策略被称为可串行化调度。
2022/2可/14串行化是并发事务正确调度的准则 。
– 原子性(Atomicity)、一致性(Consistency)、隔离性 (Isolation)、持续性(Durability),简称ACID特性
1. 原子性(Atomicity)
– 事务是数据库的逻辑工作单位,事务中包括的诸操 作要么都做,要么都不做
2. 一致性(Consistency)
– 事务执行的结果必须是使数据库从一个一致性状态 变到另一个一致性状态
2022/2/14
12
9.2 并发调度的可串行性
计算机系统对并行事务中并行操作的调度是随机的,而 不同的调度可能会产生不同的结果。
将所有事务串行起来的调度策略是正确的调度策略。
– 如果一个事务运行过程中没有其他事务在同时运行, 也就是说它没有受到其他事务的干扰,那么就可以认
为该事务的运行结果是正常的或者预想的
– 其他操作是不冲突操作
– 不同事务的冲突操作和同一事务的两个操作不能交 换(Swap)
定义9.2 如果一个调度S能通过一系列非冲突操作执行
顺序的交换变成调度S1,则称调度S和S1 冲突等价。
2022/2/14
20
9.2.2 调度的冲突等价性
【例 9-3】证明调度S是否是可串行化调度。 – S=R1(A)W1(A)R2(A)W2(A)R1(B)W1(B)R2(B)W2(B) – 把W2(A)与R1(B)W1(B)交换,得到: R1(A)W1(A)R2(A)R1(B)W1(B)W2(A)R2(B)W2(B)
➢这也是最简单的调度策略,但这种方法实际上是 不可行的,因为它不利于共享
2022/2/14
19
9.2.2 调度的冲突等价性
冲突操作
– 冲突操作是指不同的事务对同一个数据的读写操作 和写写操作
➢Ri(x)与Wj(x)
/* 事务Ti读x,Tj写x*/
➢Wi(x)与Wj(x)
/* 事务Ti写x,Tj写x*/
后两种不可重复读有时也称为幻 影现象(phantom row)
9
3. 读“脏”数据
事务1修改某一数据,并将其写回磁盘
事务2读取同一数据后,事务1由于某种原因被撤消,这 时事务1已修改过的数据恢复原值
事务2读到的数据就与数据库中的数据不一致,是不正 确的数据,又称为“脏”数据。
T1
T2
① 读C=100
Xlock B
B=X+1
写回B(=4)
Unlock B
2022/2/14
由于其执行结果与串行调度 (a)的执行结果相同,所以 是正确的调度。
18
9.2.1 可串行化调度
DBMS必须提供一定手段来保证调度是可串行化的, 如何保证并发操作的调度是正确的?
– 从理论上讲,在某一事务执行时禁止其他事务执行 的调度策略一定是可串行化的调度,
Xlock B B=X+1 写回B(=3)
Unlock A Unlock B
(c) 不可串行化的调度
错误的调度
17
(d) 可串行化的调度
T1
T2
Slock B
Y=B=2
Unlock B
Xlock A Slock A
A=Y+1 写回A(=3)
Unlock A
等待 等待 等待
X=A=3
Unlock A
– 还有不满足冲突可串行化条件的可串行化调度
2022/2/14
23
9.2.3 调度的状态等价性
[例]有3个事务 T1=W1(Y)W1(X),T2=W2(Y)W2(X),T3=W3(X)
– 调度L1=W1(Y)W1(X)W2(Y)W2(X) W3(X)是一个串行 调度。
– 调 可度 串行L2=化W1(Y)W2(Y)W2(X)W1(X)W3(X)不满足冲突 ➢因为每对操作都是冲突的,不能交换
Xlock B Xlock A
B=X+1 A=Y+1
写回B(=4) 写回A(=4)
Unlock B Unlock A
(a) 串行调度策略
(b) 串行调度策略
2022/2正/14确的调度
正确的调度
T1
T2
Slock B Y=B=2
Slock A X=A=2
Unlock B Unlock A
Xlock A A=Y+1 写回A(=3)
➢串行执行 • (a)串行调度策略、 (b)串行调度策略
➢交错执行 2022/2/14 • (c)不可串行化的调度、 (d)可串行化的调度 14
9.2.1 可串行化调度
SlocTk1 B
T2
Y=B=2
Unlock B
Xlock A
A=Y+1
写回A(=3)
Unlock A
Slock A
X=A=3
Unlock A
B=X+1 写回B(=3)
Unlock B Slock B
X=A=3 Y=B=3
Unlock A Unlock B
Xlock B Xlock A
B=X+1 A=Y+1
写回B(=4) 写回A(=4)
Unlock B Unlock A
(a) 串行调度策略
(b) 串行调度策略
2022/2正/14确的调度
正确的调度
2022/2/14
21
9.2.2 调度的冲突等价性
【例 9-3】证明调度S是否是可串行化调度。
– S=R1(A)W1(A)R2(A)W2(A)R1(B)W1(B)R2(B)W2(B) – 把W2(A)与R1(B)W1(B)交换,得到:
R1(A)W1(A)R2(A)R1(B)W1(B)W2(A)R2(B)W2(B) – 再把r2(A)与r1(B)w1(B)交换: