事务并发控制(二)

 

1、串行调度、可串行化和冲突可串行化的概念

       1.1 调度

       调度是一个或多个事务的重要操作按时间排序的一个序列。例如,有两个事务,分别为T1,T2,将事务的操作抽象成读写操作,则T1,T2的操作如下:

       T1:R1(A);R1(B),W1(B);

       T2: R2(B);R2(B),R2(C);

则T1,T2的所有读写操作的一个排序,被称为T1,T2的一个调度。

如R1(A);R2(B);R1(B);W1(B);R2(B);R2(C)是T1,T2的一个调度S。

       1.2 串行调度

       如果一个调度的动作组成首先是一个事务的所有动作,然后是另一个事务的所有动作,依此类推,而没有动作的混合,那么我们说这一调度是串行的。更精确的讲,如果有任意两个事务T和U,若T的某个动作在U某个动作前,则T的所有动作在U的所有动作前,那么调度S是串行的。

       1.3 可串行化调度

       事务的正确性原则是指:每个事务如果在隔离的情况下执行(即没有其他任何事务与之同时执行),将把任何一致的状态转换到另一个一致状态。事务的正确性原则表明,每个串行调度都将保持数据库的一致性。

       通常,如果不管数据库初态怎样,一个调度对数据库状态的影响都和某个串行调度相同,则这个调度是可串行化的。

       1.4 事务和调度的一种记法

       事务的所有操作都被抽象为读、写两种操作。为事务所进行的精确计算是任意的,因此将事务抽象为读、写操作是理的。Ti表示事务i,记法规则如下:

1) 动作是形如wi(X)和ri(X)的表达式,分别表示事务Ti写或读数据库元素X;

2) 事务Ti是具有下标为i的动作序列;

3) 事务集合T(含有多个事务)的调度S是一个动作序列,其中对T中的每个事务Ti,Ti 中的动作在调度S中出现的顺序和其在Ti自身定义中出现的顺序一样。我们说事务S是组成它的事务动作的一个交错。

    1.5 冲突可串行化

冲突是指调度中两个连续的动作,它们满足:如果它们的顺序交换,那么设计的事务中至少有一个的行为会改变。

不同事务的任何两个相邻动作在顺序上可以交换,除非:

  1. 它们涉及同一数据库元素,
  2. 至少有一个是写。

按照上面的规则,可以对任意调度进行非冲突的交换,目标是将该调度转换为一个串行调度。如果能够做到这一点,那么初始的调度是可串行化的。

例如,有两个事务,T1,T2:

T1:r1(A);r1(B),w1(B);

T2: r2(A),w2(A);

调度S:r1(A),r1(B),r2(A),w1(B), w2(A)

S中的r2(A),w1(B)能够进行非冲突交换,

得到调度S′:r1(A),r1(B),w1(B), r2(A), w2(A),即T1,T2的一个串行调度(T1,T2),那么可以说调度S是可串行化的。

如果通过一些列相邻动作的非冲突交换能将一个调度转换为另外一个调度,则这两个调度是冲突等价的。如果一个调度冲突等价于一个串行调度,那么该调度是冲突可串行化的。这里需要注意,冲突可串行化是可串行化的一个充分条件:即冲突可串行化调度是串行化调度。冲突可串行性对一个可串行化调度来说不是必要的,但它是商用系统中的调度器在需要保证可串行性时通常使用的条件。

上面的例子中,调度S与调度S′是冲突等价的,又由于调度S′是T1,T2的一个串行调度,即调度S冲突等价于一个串行调度,则S是冲突可串行化的。

你可能感兴趣的:(事务并发控制(二))