第十三章 事务处理技术之一:并发控制技术...

31
第第第第 第第第第第第第 第第第第第第 一: 第第第第第第第 第第第第第第 第第第第第第第第第第第第 一, 第第第 第第第第第第第第第第第第第第第第第 第第第第第 。。 第第第第第第第第第第第第第第 第第第第第第第 第第第第 ,, 第第第第第第第第第 第第第第第第第第第第第第第第第第 第第第 第第第第第第第第第第第第第 ,。 第第第第第第第第第第第第第第第第第第 第第第 第第第第 第第第 第第第第第第第第第 第第第 第第第第第第第第第第 第第第 第第第第第 第第第 第第第第第第第第 第第第 第第第第第第第 M

Upload: diza

Post on 22-Jan-2016

177 views

Category:

Documents


0 download

DESCRIPTION

M. 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机 构用于控制多个事务的并发运行,避免相互干扰,保证每个 事务产生正确的结果。数据库恢复机构用于系统失败后的恢 复处理,确保数据库恢复到正确状态。 本章讨论并发控制技术。 第一节 并发控制的必要性 第二节 事务模型 第三节 事务调度与可串行性 第四节 基于锁的并发控制协议 第五节 时间印协议 第六节 其它并发控制技术 第七节 插入和删除操作. M1. 第一节 并发控制的必要性 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

第十三章 事务处理技术之一:并发控制技术

事务是数据库的一个操作序列,是数据库应用程序的基本逻辑单元。事务处理包括并发控制和数据库恢复。并发控制机构用于控制多个事务的并发运行,避免相互干扰,保证每个事务产生正确的结果。数据库恢复机构用于系统失败后的恢复处理,确保数据库恢复到正确状态。本章讨论并发控制技术。

第一节 并发控制的必要性 第二节 事务模型 第三节 事务调度与可串行性 第四节 基于锁的并发控制协议 第五节 时间印协议 第六节 其它并发控制技术 第七节 插入和删除操作

M

Page 2: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

第一节 并发控制的必要性多个用户同时使用的数据库系统称为多用户数据库系统。例如,由于飞机售票系统和银行通存通取业务系统均需要同时处理多个用户提交的数据库事务,因此都属于多用户数据库系统。本章讨论的多用户数据库系统仅考虑单处理机。在这种情况下,多个程序的并发运行实际是轮流交叉运行,任何时刻至多仅一个程序在运行。运行中的程序在等待信息时被挂起,让其它程序运行。当等待的信息到来而处理机空闲,程序就在被挂起处恢复执行。一个存取或改变数据库内容的程序的运行称为一个数据库事务,简称为事务。对多个同时运行的事务需要适当控制,这不但可以减少处理机的空闲时间,提高系统效率,而且可以避免发生一些错误。下边三个例子说明,对并发运行的多个事务如果不加以适当控制将会引起一些问题。

M1

接下页

Page 3: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

两事务并发执行事务 T1 事务 T2read(x);x=x-n; read(x); x=x+m;write(x);read(y); write(x);y=y+n;write(y).

事务 T1 :{ 在 x 取出 n,加到 Y 上去 }read(x);x=x-n;write(x);read(y);y=y+n;write(y).

M11

事务 T2 :{ 在 x 添加 m}read(x);x=x+m;write(x).

设始值为 x=80 , n=5 , m=4 ,若按先 T1 后 T2 或先 T2 后 T1的串行执行,结果是 x=79 ;但按左边表格所示的并发执行顺序,结果却是 x=84 。这个并发执行的结果是错误的。产生错误的原因是T2 在 T1 把更新数据写入磁盘之前读 x ,丢失 T1 对 x 更新结果

对并发不加控制而引起问题 例 1 :数据更新丢失问题

接下页

Page 4: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

事务 T1 :{ 在 X 取出 n,加到 Y 上去 }read(x);x=x-n;write(x);read(y);y=y+n;write(y).

M12

事务 T2 :{ 在 X 添加 m}read(x);x=x+m;write(x).

对并发不加控制而引起问题 例 2 :临时值问题

两事务并发执行事务 T1 事务 T2read(x);x=x-n;write(x) read(x); x=x+m; write(x);read(y);读 y 失败

事务 T1 读 y 失败,本应恢复 x ,但 x 已被 T2 更新,故无法恢复 x 。

接下页

Page 5: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

两事务并发执行事务 T1 事务 T2 s=0; read(y); s=s+y;read(x);x=x-n;write(x); read(x); s=s+x;read(y);y=y+n;write(y).

事务 T1 :在 x 取出 n, 加到 Y 上去read(x);x=x-n;write(x);read(y);y=y+n;write(y).

M13

事务 T2 :累计 x+ys=0read(y);s=s+yread(x);s=s+s;

对并发不加控制而引起问题 例 3 :错误聚集计算问题

事务 T2 累总过程中受到事务 T1 的干扰,因而得出错误结果

Page 6: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

第二节 事务模型1. 事务的读写操作

事务的数据库操作只有如下两个:(1)read(x,y) 读取数据库中数据项 x ,存入程序变量 y. 实现算法为: 1) 确定存放数据项 x 的磁盘块地址; 2) 若此磁盘块的数据未放入主存缓冲区, 则把它放入主存缓冲区; 3) 在主存缓冲区找到数据项 x ,存入程序 变量 y.(2)write(y,x) 把程序变量 y 的值写入数据库中数据项 x. 实现算法为: 1) 确定存放数据项 x 的磁盘块地址; 2) 若此磁盘块的数据未放入主存缓 冲区,则把它放入主存缓冲区; 3) 把程序 变量 y 的值放入主存缓冲区; 4) 把主存缓冲区的内容写入磁盘。

M2

接下页

写磁盘块数据项 x

数据库

缓冲区

变量 Y主存

Page 7: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

2. 事务的原子性

事务的原子性是指为使数据库保持正确状态而对事务作 出的如下要求: 事务中所有操作要么全部成功地完成并将结果存入磁盘, 要么放弃该事务并取消它对数据库和其它事务的影响。 满足事务原子性的主要方法是本章介绍的串行化技术。 事务的原子性被破坏有如下两种情况: 情况 1 :多个事务的操作交叉运行,未作合理控制。 情况 2 :事务在运行中被强行地停止。 为了防止发生情况 1 , DBMS 必须对操作序列施加约束, 保证每个事务的原子性; 对于情况 2 , DBMS 必须有能力撤销被强行停止的事务对 数据库和其它事务的影响。

M21

接下页

Page 8: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

3. 事务的状态

事务在运行中的状态可以划分为如下五种:(1)活动状态:事务从开始到部分提交或失败;(2)部分提交状态:事务执行完最后一条语句 end ;(3) 失败状态:事务被发现不能运行下去时;(4)异常结束状态:失败的事务撤销对数据库和其它事务 的影响后,退出数据库系统;(5) 提交状态:成功的事务完成了所有操作并把对数据库 的影响存盘,之后退出数据库系统。下图表示事务状态的转换,框图之间的文字表示操作:

M22

活动状态

部分提交状态

失败状态

提交状态

异常结束状态

end执行完

未完成

begin commit

abort撤消影响

成功吗?存盘

Page 9: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

第三节 事务调度与可串行性一 事务的调度定义 N 个事务的一个调度 S 是这 N 个事务所有操作的一个序 列,表示这些操作的执行顺序,并且满足: 任两个属于同一事务的操作 i 和 j ,若 i 先于 j 执行, 则在调度 S 中, i 同样也先于 j 执行。根据调度的定义,可以知道: (1) 事务内部的操作顺序,在事务加入调度之后保持不变; (2) 不同事务的操作序列保持顺序并互相穿插构成调度。如果在一个调度中,属于同一个事务的操作邻接地执行,则把这一类调度称为串行调度。其它类型的调度(不同事务的操作交错执行)称为并行调度。 并发事务可以组成许多调度,其中只有很少的调度是串行的。例:设事务 1 为 ABC ,事务 2 为 PQR ( 每个字母表示一个操作 ) 则 ABCPQR 和 PQRABC 都是串行调度; ABPCPQ 和 PAQBCR 都是并行调度; ACPBQR 和 PABCRQ 都不是调度。思考:此例有多少个调度?其中有多少个串行调度?

M3

接下页

Page 10: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

下边的例子说明不同调度的执行效果可能是不同的。例:设初始值为 a=20, b=30

T0 T1

read(a); a:=a-10;write(a); read(a); tmp:=a/10; a:=a-tmp; write(a);read(b);b:=b+10;write(b); read(b); b=:b+tmp; write(b);

T0 T1

read(a); a:=a-10; read(a); tmp:=a/10; a:=a-tmp; write(a); read(b);write(a);read(b);b:=b+10;write(b); b=:b+tmp; write(b);

T0 T1

read(a); tmp:=a/10; a:=a-tmp; write(a); read(b); b=:b+tmp; write(b);read(a); a:=a-10;write(a);read(b);b:=b+10;write(b);

T0 T1

read(a); a:=a-10;write(a);read(b);b:=b+10;write(b); read(a); tmp:=a/10; a:=a-tmp; write(a); read(b); b=:b+tmp; write(b);

运行结束时A=9 , B=41A+B=50

运行结束时A=8 , B=42A+B=50

运行结束时A=9 , B=41A+B=50与相同

运行结束时A=10 , B=32A+B=42 结果错误原因 : 状态不一致

M31

串行调度 并行调度

接下页

Page 11: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

为充分发挥系统效能,我们希望多个事务并发运行,但前边已有例子表明,并行调度可能产生与串行调度不同的效果,故需要建立能保证与串行调度具有相同效果的控制方法。如何形成并行调度才与串行调度等效?这是本节可串行性理论解决的问题。可串行性理论有两个要点:

它主要关心数据库的读写操作,即 read 和 write 操作; 它的目的是研究如何形成一个可串行的并行调度,即‘等价’ 于一个串行调度的并行调度。下边介绍‘等价’的几个定义: 1 冲突等价性 2 效果等价性 3 状态等价性

二 调度的可串行性

若每个事务的程序是正确的,则多个事务的串行调度( 如下图 ) 的运行结果也必定是正确的。

事务 1 事务 2 事务 3

M32

接下页

Page 12: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

1 调度的冲突等价性

冲突操作的定义: 若两个操作来自不同事务,但作用在同一个数 据项且至少一个是 write ,则称之为互相冲突。 不冲突操作性质: 若调度的两个相继操作来自不同的事务且互不 冲突,则交换它们的执行次序并不影响每个事 务的运行结果。冲突等价性的定义: 若调度 S1 对来自不同事务的相继两个非冲突操 作交换次序变成调度 S2 ,则称调度 S1 和 S2 是冲 突等价的。冲突可串行定义: 若调度 S 冲突等价于某串行调度,则称之为冲突 可串行。此时 S 可以通过交换某些相继非冲突操 作变成串行调度。

M33

接下页

Page 13: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

T0 T1

1 read(a);2 write(a); 3 read(b);4 write(b); 5 read(b);6 write(b). 7 read(a);8 write(a).

T0 T1

read(a); a:=a-10;write(a); read(a); a:=a-1; write(a);read(b);b:=b+10;write(b); read(b); b=:b+1; write(b);

例 2 右图的调度是冲突可串行的,因为事务 T1 的前三句可与事务 T0 的后三句交换。

例 1 如下图的调度中,1 和 2、 3 和 4、 5 和 6、 7 和 8 是不能交换的,因为同属一个事务。2 和 3, 6 和 7能交换,因为它们作用于不同数据项,不冲突。4 和 5 不能交换,因为它们互相冲突。因 3 和 4 不能移到 6 之下, 7 和 8 不能移到 1 之上,故调度不是冲突可串行的。

M34

接下页

Page 14: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

2 调度的效果等价性效果等价性的定义:若调度 S1 与 S2 执行 结果相同,则称它们效果等价。等效可串行性的定义:若调度 S 效果等价 于串行调度,则称之为等效可串行。两个调度若冲突等价则必具有相同效果,但这个陈述反过来却未必正确,见下例。该例调度是等效可串行,因为其结果和两个串行调度 (T0,T1)、 (T1,T0) 的结果都是:帐号 A 把 1 元钱转到帐号 B 。例如,对初值 a=20 和 b=10 ,三个调度的处理结果都是 a=19,b=11.注意该例调度不是冲突可串行,因为事务T1 的前三句不能下移到 T0 之后,而后三句不能上移 T0 之前。冲突可串行仅需分析 read 和 write语句,故存在有效测试;但等效可串行性却需要分析所有操作,故测试复杂得多。

T0 T1read(a);a:=a-2;write(a); read(b); b:=b-1; write(b);read(b);b:=b+2;write(b); read(a); a:=a+1; write(a);

冲突等价效果等价

接下页

M35

Page 15: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

3 调度的状态等价性状态等价性的定义: 若调度 S1 与调度 S2满足下面条件, 则称它们是状态等价的: 对每个数据项 Q , (1) 若 S1 的事务 T 读 Q 的初值,则 S2 的事务 T也读 Q 的初值。 (2) 若 S1 的事务 T 读 Q ,则 S2 的事务 T也读 Q ; 若 S1 中事务 T1 读到的 Q 值是事务 T2 产生的, 则 S2 中事务 T1 读到的 Q 值也是事务 T2 产生的。 (3) 若 S1 中事务 T 执行最后的写 Q 操作, 则 S2 中事务 T也执行最后的写 Q 操作。

T2 T3 T5read(Q) write(Q)write(Q) write(Q)

S1

S2(T2,T3,T5)

状态可串行性的定义: 若调度 S 状态等价于串行调度, 则称之为状态可串行。冲突可串行调度必然状态可串行,但这个陈述反过来却未必正确。右例调度 S1 与 S2 是状态等价的,但 S1 不是冲突可串行。

M36

接下页

冲突等价效果等价

Page 16: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

叁 调度可串性性测试

1 冲突可串行测试方法 前趋图概念 G=(V,E) 点集 V :每个点表示一个事务; 边集 E :每个边 (Ti ,Tj ) 表示访问同一个数据项 Q 的两个 事务 Ti ,Tj ,要求满足下列三条件之一 ( 冲突方向 ) : (1) Ti 写 Q 后, Tj 读 Q ; (2) Ti 读 Q 后, Tj 写 Q ; (3) Ti 写 Q 后, Tj 写 Q 。 前趋图无回路冲突方向是单一的 调度是冲突可串行的 N 个事务调度前趋图的回路测试法需要时间为 O(N2)2 状态可串行性测试 不存在有效算法。 标号前趋图测试回路的时间复杂性是问题大小的指数。

M37

接下页

Page 17: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

T0 T1

Read(A);A=A-50;write(A);Read(B);B=B+50;Write(B); Read(A); Tmp=A*0.1; A=A-tmp; Write(A); Read(B); B=B+tmp; Write(B);

T0 T1

Read(A); Tmp=A*0.1; A=A-tmp; Write(A); Read(B); B=B+tmp; Write(B);Read(A);A=A-50;write(A);Read(B);B=B+50;Write(B);

T0

T1 T0

T1

前趋

图 前趋

M38

左图:两个事务对共同访问数据项的读写顺序,总是 T0 先于事务 T1 ,因此前趋图仅有 T0指向 T1 的边。右图:正好相反。

前趋图

接下页

Page 18: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

T0 T1

Read(A);A=A-50; Read(A); Tmp=A*0.1; A=A-tmp; Write(A); Read(B);write(A);Read(B);B=B+50;Write(B); B=B+tmp;13-8 Write(B);

T0

T1

T0 T1

Read(A);A=A-50;write(A); Read(A); Tmp=A*0.1; A=A-tmp; Write(A);Read(B);B=B+50;Write(B); Read(B); B=B+tmp;13-7 Write(B);

T0

T1

两个事务对共同访问数据项的读写顺序,既有T0 先于 T1 ,又有 T1 先于T0 ,因此前趋图在 T0 和T1 之间有反向的两边。

两个事务对共同访问数据项的读写顺序,总是 T0 先于 T1 ,因此前趋图在 T0 和 T1 之间有反向的两条边。

M39

前趋图

Page 19: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

第四节 基于锁的并发控制协议

这类协议以事务等待的方式获得可串行性调度。一 锁的概念 共享锁 (S) :若事务 T 得到数据项 Q 的共享锁, 则 T 对 Q 可以读但不可以写。 用 LOCK_S(Q) 表示。 互斥锁 (X) :若事务 T 得到数据项 Q 的互斥锁, 则 T 对 Q 可进行读和写的操作。 用 LOCK_X(Q) 表示。 用户访问数据项 Q 前必须对 Q 加锁, 前后两个用户对 Q 加锁必须遵守相容性约束: 若前用户对 Q 加 S 锁,则后用户只能加 S 锁; 若前用户对 Q 加 X 锁,则后用户不能加锁。 为了充分利用系统资源,用户应该适时释放所占有 的资源。释放资源的时机很重要,后边将举例说明, 过早或过迟释放资源都可能引发一些问题。 释放加在数据项 Q 上的锁,用 UNLOCK(Q) 表示。

M4

接下页

Page 20: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

T7 T8

Lock_x(B);Read(B); B=B-50; Write(B); Unlock(B); Lock_s(A); Read(A); Unlock(A); Lock_s(B); Read(B); Unlock(B); Disp(A+B);Lock_x(A); Read(A); A=A+50; Write(A); Unlock(A);

M41

设初值为 A=100,B=200 。事务 T7 的功能是把帐号 B 的 50 元转到帐号 A ; 事务 T8 的功能是显示两 帐号的余额之和。 该调度为提高并发性而尽早解锁,但后果是:T8访问的数据库不一致。两事务串行调度时,T8显示总和为 300 元。如使用上述调度,T8 则显示 250 元。故该调度是错误的。

过早解锁造成数据库不一致的例

接下页

Page 21: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

T9 T10lock_x(B); read(B);b=b-50;write(B); lock_s(A); read(A); lock_s(B);lock_x(A);死琐

前例由于过早解锁而出现了数据库不一致的问题,那么把解锁操作放最后又如何呢?在左边的的例子种,这样处理又产生了死锁问题。 T10 的第三句等待 T9解开 B 锁,把运行的机会交给 T9 ,但 T9 要对 A 加互斥锁,要等待 T10解开这个锁,于是出现了互相无限期等待的状态,使得两个事务都无法进行。这种由于互相无限期等待对方解锁而造成事务停顿的现象称为死锁。

M42

过迟解锁造成死锁的例

接下页

Page 22: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

‘先于’概念:若调度中的两事务 S 和 T 一先一后地对数据项 Q 加锁 且两锁不相容,则称 S 先于 T 。记作 ST.调度的有向图:即按先于关系用箭头连接各事务结点所得的图。调度的有向图与前趋图的区别: 前趋图根据的是不同事务对同一数据项读写的冲突性; 有向图根据的是不同事务对同一数据项加锁不相容性。因读 / 写操作需加 S/X 锁,故两种图在冲突可串行性测试上很相似 .一个锁协议称为‘确保冲突可串行性’有向图无环

前两例告诉我们:若为了提高并发性而尽快解锁, 则可能导致不一致的数据库状态;若在申请其他锁之前不尽量释放已拥有的锁, 则可能导致死锁。故应对并行事务的锁操作加以约束, 使事务能正常进行并保持正确状态,这就是锁协议。我们将要学习与锁有关的三个协议: 锁协议:两段锁协议,数据库图协议 ; ( 后边还要介绍一个非锁概念的协议:时间印协议 )

M43

接下页

Page 23: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

L_s(a1); L_s(a1);read(a1); read(a1);L_s(a2); L_s(a2);read(a2); read(a2); upg(a1); unL(a1);write(a1); unL(a1);

T11 T12

read(a1); read(a1);read(a2); read(a2);write(a1); disp(a1+a2);

二 两段锁协议两段锁协议规定:每个事务分为两阶段 ,前阶段加锁而不解锁,后阶段解锁而不加锁。其特点是:通过等待 , 实现 ( 冲突 )可串行调度,但可能发生死锁。1) 按照两段锁协议,在上边的例子中, 考虑到后边有 write语句, T11 必须对 a1 加 x 锁,无论哪个事务先行,由于 等待,只能产生串行调度,并发性低 .2) 为提高并发性 , 有改进的两段锁协议: 加锁阶段增加 upgrade语句: s 锁升为 x 锁,但可能要等待其它事务解 s 锁。 解锁阶段增加 downgrade语句:把 x 锁 降级为 s 锁。见右边的中图。3) 若发生互相等待解锁,调度即陷入死 锁状态。造成死锁原因是两事务访问 数据项有不同顺序。见右边的下图。

T9 T10lock_x(B); lock_s(A); lock_s(B);lock_x(A); 死琐

M44

接下页

Page 24: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

三 数据库图协议定义数据库图: 对于数据库 DB ,其数据库图是一个有向图 G=(D,E) ,其中 D 是有关数据项的集合,边 (d1,d2)E 当且仅当所有访问数 据项 d1,d2D 的事务都是先访问 d1 后访问 d2 的。简单数据库图协议 (树协议,仅使用 X 锁 ) : 每个事务 T 对一个数据项最多只能加锁一次,而且遵循下 述规则: 1) 事务 T 的第一锁可加到任数据项; 2) 数据项 Q 可被 T 加锁,仅当其父结点已被 T 加锁; 3) 数据项任何时候可解锁; 4) 被 T解锁的数据项不再接受 T 加锁。 特点 1 :满足树协议的事务所构成的调度都是冲突可串行的;特点 2 :数据库图是一个有向无环图;特点 3 :由于构成调度的不同事务访问数据项的顺序是一致的 , 故不会发生互相等待解锁的现象,从而保证调度是无死锁的 .

M45

接下页

Page 25: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

T13:lock(B); lock(E);unlock(E); lock(D); unlock(B);lock(G);unlock(D); unlock(G).BEDGT14:lock(D);lock(H);unlock(D);unlock(H).DHT15:lock(B);lock(E);unlock(E);unlock(B).BET16:lock(D);lock(H);unlock(D);unlock(H).DH

A

ED

CB

HG

F

I

数据库图

上述四个事务均按下边数据库图遵守树协议,所形成的调度是冲突可串行且无死锁的。

T14

T13

T16T15

树协议的优点是较早解锁,提高并行性并避免死锁;缺点是要对某些无关数据项加锁。

例:遵守数据库图的四个事务

有向

图前趋

M46

接下页形成的调度见下页

Page 26: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

按序访问有向图无环 冲突可串行及无死锁 数据库图协议是确保冲突可串行性的协议

T13 T14 T15 T16Lock(B) lock(D) lock(H) unlock(D) Lock(E) unlock(E) lock(D) unlock(B) lock(B) lock(E) unlock(H) lock(G)unlock(D) lock(D) lock(H) unlock(D) unlock(H) unlock(E) unlock(B) unlock(G)

T14

T13

T16T15

有向

图前趋

M47

上页例子形成的调度

Page 27: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

第五节 时间印协议 事务 T 的时间印 TS(T) 定义为关于事务启动时刻的某个增函数。例如 TS(T) 可定义为事务的启动时刻。 T启动得越迟, TS(T) 就越大。每个数据项 Q 有两个动态时间印: W_TS(Q) 表示写 Q 的各个事务中的最大时间印; R_TS(Q) 表示读 Q 的各个事务中的最大时间印。时间印协议:1) 当事务 T 要求执行读 Q , 若 TS(T)<W_TS(Q) ,则放弃 T, 否则,执行并修改 R_TS(Q)=MAX(R_TS(Q),TS(T)).2) 当事务 T 要求执行写 Q , 若 TS(T)<R_TS(Q) , 或 TS(T)<W_TS(Q) ,则放弃 T, 否则,执行并修改 W_TS(Q)=MAX(W_TS(Q),TS(T)).被放弃的事务将获得新的时间印并重新执行。由于新的时间印具有更大的值,故重启事务更易获准执行。对时间印较小的事务实行放弃并重启,使冲突操作顺序与事务启动顺序一致,保证冲突可串行性。又因不要求事务等待,故不引起死锁。

Q 写印 T 印须在 Q 写印之后

Q 写印Q 读印T 印须在 Q 读印和 Q 写印之后

M5

Page 28: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

两个变量集

四个时间印

第六节 其它并发控制技术一 实现并发控制的验证技术 前述各法对每操作都须检查 ( 锁或时间印 ) ,故速度慢。 验证技术:运行数据副本,验证各更新操作的冲突可串 行性。决定是提交 ( 用副本数据更新数据库 )还是放弃。 使用验证技术的时间印并发控制方法: 事务 T 所写的数据项集合 w_set(T); 事务 T 所读的数据项集合 r_set(T); sr(T): 事务 T 始读时刻 ; fr(T): 事务 T终读时刻 ; sw(T): 事务 T 始写时刻 ; fw(T): 事务 T终写时刻 ; 验证事务 Ti : 扫描所有在线事务 Tj ,是否满足: fw(Tj)<sr(Ti ) ( 在 Tj 的写集和 Ti 的读集的交集中, j 写后 ,i才读 ) fw(Tj)<sw(Ti ) 且 r_set(Ti) 与 w_set(Tj) 不交 ( 在 Tj Ti 的写集之交中, j 写后, i才写 ) fr(Tj)<fr(Ti ), 且 r_set(Ti)及 w_set(Ti) 都不与 w_set(Tj) 相交 ( 在 Tj Ti 的读集之交中 ,j 读完后 ,i才读完 ) 若上述三条件之一成立,则无冲突, Ti 被成功验证; 否则,可能发生冲突,放弃 Ti ,待以后重新启动。

接下页

M6

Page 29: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

二 多版本并发控制技术 ( 时间印协议 )前述各法用推迟操作或放弃事务保证可串行性,本法建立数据项 D 的版本系列。读 D 时,系统将选择 D 的正确版本。本方法所用的符号:Ts(T) :事务 T 的时间印 ( 例如 T 的开始时刻 ) ;{Di} : 数据项 D 的版本集,每版本 Di含三个数据域: (1) 数据值 = Di 的值; (2) 写印 W_TS(Di) :建立版本 Di 的事务印。注意不是写版 本 Di 的时刻,而是写 Di 事务的开始时刻。 (3) 读印 R_TS(Di)=max{TS(Tj)| Tj成功读取版本 Di} 。注意 这不是最新读 Di 的时刻,而是读取 Di 的事务当中,最 大的事务印 (最年轻的事务印 ) 。

M61

接下页

Page 30: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

多版本并发控制[ 协议 ] 设事务 T 执行对数据项 D 的读写操作 , 设 Dk满足: 写印 W_TS(Dk)=max{W_TS(Dj) | W_TS(Dj)<TS(T)} , ( 称 Dk 是 D 在 T 前最年轻的版本 )规则 1 :设 T 读 D ,则读到的是版本 Dk 的数据值; 读后更新读印 R_TS(Dk) ;规则 2 :设 T 写 D ,若读印 R_TS(Dk)>TS(T) ,则放弃 T , 否则建立 D 的新版本。规则 1 保证事务 T 读到在时间上早于 T 的最新数据项版本;规则 2 保证若事务 T 的写操作太迟,则拒绝写而放弃事务 T 。该协议优点是读得快,不必等待; 缺点是读 Dk 时必须更新 R_TS(Dk) ,故要写盘, 此外采取放弃事务来解决事务的冲突问题。

M62

TS(T)写印 {Dj} Dk

时间

Page 31: 第十三章 事务处理技术之一:并发控制技术 事务是数据库的一个操作序列,是数据库应用程序的基本逻 辑单元。事务处理包括并发控制和数据库恢复。并发控制机

M7第七节 插入和删除操作前述各种并发控制方法仅考虑读写操作,本节讨论插入和删除对并发控制的影响。基本原理是不能删除一个不存在的数据项,也不能插入一个已经存在的数据项。否则产生逻辑错误。为避免这类逻辑错误,对插入删除操作作出约束。一 . 删除操作对并发控制的影响 要建立约束防止数据项删除后的读写及删除操作。 对并发控制协议例如两段锁协议补充规定: 数据项必须先加互斥锁,然后才能删除。二 . 插入操作对并发控制的影响 对数据项的插入操作实际上是分配初始值,要增加 约束为了防止插入前的读写操作。三 插入元组现象 某事务的插入元组操作导致另一事务产生错误,这 类现象称为插入元组现象。可采用索引锁等技术防 止这类现象的出现。