-
调度:并发事务的操作顺序
-
不同的事务处于串行关系时,一定没有状态不一致的问题
-
可串行化调度:多个事务的并发执行是正确的,当且仅当并发执行的结果与这些事务按照某一串行顺序执行的结果相同
-
(1) 如果两个操作X和Y,读写的数据项不同,则调度中的事务操作顺序不会影响任何操作结果
(2) 当两个操作X和Y,如果读写的数据项相同,但是它们都为读操作时,它们的顺序无关紧要
(3) 当两个操作X和Y,如果读写的数据项相同,只要它们中有一个包含了写操作,那么操作的顺序就会影响结果
-
非冲突操作
(1) 定义:两个操作交换顺序时,不改变结果
(2) 包括:
1° 读写不同的数据项
2° 读相同的数据项
-
调度的冲突等价
如果一个调度S,可以通过一系列非冲突操作执行顺序的交换变成调度S',则调度S和调度S'冲突等价
示例
一个调度S,包含两个事务T1、T2,其中T1包括A1,A2,A3三个操作,T2包括B1,B2,B3三个操作,S的调度顺序是 A1-B1-A2-B2-A3-B3;
如果通过一系列的非冲突操作变成调度S': A1-A2-A3-B1-B2-B3,此时调度S'变成了串行调度;
又S和S'冲突等价,所以调度S不会造成数据不一致的问题
-
冲突可串行调度的测试方法
(1) 一个调度所包含的所有事务构成顶点集合
(2) 如果事务Ti和事务Tj满足且以下三个条件之一时,它们构成一条边
1° Ti先执行Write(A),然后Tj执行Read(A)
2° Ti先执行Read(A),然后Tj执行Write(A)
3° Ti先执行Write(A),然后Tj执行Write(A)
(3) 按照(1),(2)可以得到事务S的一张图,
如果图中出现回路,则S不是冲突可串行的;如果图中不出现回路,则S是冲突可串行的
-
调度的状态等价
(1) 调度的冲突等价过于严格,排斥了很多正确的并行调度,因此需要更加宽松的的定义。
(2) 状态等价的定义
如果初始数据库状态相同,两个调度可以产生同样的数据库状态,此时称为两个调度状态等价
(3) 状态等价的条件
若调度S1和调度S2状态等价,则必须满足
1° 对每个数据项A,如果S1中的事务T1读A的初值,则S2中的T1也必须读A的初值
2° 如果S1中的事务T1执行Read(A),则S2中的事务T1也必须执行Read(A);并且,如果S1中的T1读到的A的值是由事务T2产生的,那么S2中的T1读到的A的值也是由事务T2产生的
3° 如果S1中有一个事务执行最后的Write(A)操作,则该事务在S2中也必须执行最后的Write(A)操作
(4) 冲突可串行调度一定是状态可串行调度,状态可串行调度未必冲突可串行调度
网友评论