DBMS 中不同类型的调度是什么?


调度被定义为事务的执行序列。调度维护每个单独事务中操作的顺序。调度是事务操作的安排。调度可能包含一组事务。我们已经知道事务是一组操作。为了并发运行事务,我们以交错的方式安排或调度它们的操作。

调度分为 2 类,如下所示:

  • 串行调度
  • 非串行调度

以下是用图表形式给出的调度类别:

串行调度

此调度中存在的事务按顺序执行,在 Ti 的指令完成之后,Tj 的指令将被执行,其中 j=i+1。

串行调度保证一致性:

  • 对于 2 个事务,可能的串行调度的总数 = 2。

  • 对于 3 个事务,可能的串行调度的总数 = 6。

 2 Transaction      3 Transaction
   T1->T2           T1->T2->T3
   T2->T1           T1->T3->T2
                    T2->T1->T3
                    T2->T3->T1
                    T3->T1->T2
                    T3->T2->T1

如果 n = 事务数,则可能的串行调度的数量 = n!。

串行调度始终给出正确的结果。但是,为了提高时间效率,我们遵循并发调度。因此,我们必须确保并发调度的可串行化。

非串行调度

当事务在事务 T1 和 T2 之间重叠时。

示例

T1T2
READ1(A)
WRITE1(A)

READ2(B)

WRITE2(B)
READ1(B)
WRITE1(B)
READ1(B)

非串行调度的类型

非串行调度分为可串行化和非串行调度。让我们首先讨论可串行化。

可串行化有两种类型,如下所示:

视图可串行化

如果调度与串行调度视图等效,则该调度为视图可串行化。

它遵循的规则如下:

  • T1 读取 A 的初始值,然后 T2 也读取 A 的初始值。

  • T1 读取 T2 写入的值,然后 T2 也读取 T1 写入的值。

  • T1 正在写入最终值,然后 T2 也具有写入操作作为最终值。

冲突可串行化

它以与某些串行执行相同的方式对任何冲突操作进行排序。如果两个操作作用于相同的数据项并且其中一个是写入操作,则称这两个操作冲突。

这意味着,

  • Readi(x) readj(x) - 非冲突读-读操作

  • Readi(x) writej(x) - 冲突读-写操作。

  • Writei(x) readj(x) - 冲突写-读操作。

  • Writei(x) writej(x) - 冲突写-写操作。

非串行调度分为可恢复和不可恢复调度。让我们首先了解可恢复调度。

可恢复调度

考虑以下示例:

T1T2
R(X)
W(X)

W(X)

R(X)
READ1(B)
提交

提交

这里,事务 T2 读取事务 T1 写入的值,并且 T2 的提交发生在 T1 的提交之后。因此,这是一个可恢复调度。

同样,**可恢复调度又分为级联避免和严格调度**:

  • 级联避免调度

以下是级联避免调度的示例:

T1T2
R(X)
W(X)

W(X)
提交

R(X)

提交

这里,事务 T2 仅在事务 T1 提交后读取 **X** 的更新值。因此,该调度为 **级联避免调度**。

  • 严格调度

以下是严格调度的示例:

T1T2
R(X)

R(X)
W(X)
提交

W(X)

R(X)

提交

这里,事务 T2 仅在事务 T1 提交后读取和写入事务 T1 的更新或写入值。因此,该调度为 **严格调度**。

现在让我们看看不可恢复调度。

不可恢复调度

不可恢复的调度就是不可恢复的。如果 Ti 的提交操作没有发生在 Tj 的提交操作之前,则它是不可恢复的。

考虑以下给出的不可恢复调度的示例:

调度 1

T1T2
read(x)
x=x-n
write(x)

read(x)

x=x+n

write(x)

提交

调度 2

T1T2
read(a)
a=a+5
write(a)

read(a)
提交

更新于: 2021-07-08

14K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始
广告