DBMS 调度和调度类型

DBMS 调度和调度类型,我们知道事务是一组指令,这些指令在数据库上执行操作。当多个事务同时运行时,需要有一个执行操作的序列,因为一次只能对数据库执行一个操作,这一系列操作称为 调度

让我们举个例子来了解 DBMS 中的调度是什么。

DBMS 调度示例

以下操作顺序是调度。这里我们有两个事务T1T2同时运行。

此调度确定将在数据库上执行的操作的确切顺序。在这个例子中,事务T1的所有指令都在事务T2的指令之前执行,但是这并不总是必要的,我们可以有各种类型的调度,我们将在本文中讨论。

T1  T2
----    ----
R(X)    
W(X)    
R(Y)    
        R(Y)
        R(X)
        W(Y)

DBMS 中的调度类型

我们在 DBMS 中有各种类型的调度,让我们逐一讨论它们。

DBMS 调度和调度类型

串行调度

串行调度中,在开始执行另一个事务之前完全执行事务。换句话说,您可以说在串行调度中,事务在当前正在运行的事务完成执行之前不会开始执行。这种类型的事务执行也称为非交错执行。我们上面看到的例子是连续调度。

串行调度示例

这里R表示读操作,W表示写操作。在此示例中,事务T2在事务T1完成之前不会开始执行。

T1  T2
----    ----
R(A)    
R(B)    
W(A)
commit  
        R(B)
        R(A)
        W(B)
        commit

严格调度

在严格调度中,如果事务的写入操作先于另一个事务的冲突操作(读取或写入操作),则此类事务的提交或中止操作也应该在其他事务的冲突操作之前。

严格调度示例

假设我们有两个事务TaTb。事务Ta的写入操作在事务Tb的读取或写入操作之前,因此事务Ta的提交或中止操作也应该在读取或写入Tb之前。

Ta  Tb
-----   -----
R(X)    
        R(X)
W(X)    
commit  
        W(X)
        R(X)
        commit

这里,Ta的写操作W(X)Tb的冲突操作(读或写操作)之前,因此Tb的冲突操作必须等待Ta的提交操作。

无级联调度

在无级联调度中,如果事务要对某个值执行读操作,则必须等到执行写入该值的事务提交。

无级联调度示例

例如,假设我们有两个事务TaTbTb将在TaW(X)之后读取值X,然后Tb必须在读取X之前等待事务Ta的提交操作。

Ta   Tb
-----    -----
R(X)    
W(X)    
         W(X)
commit  
         R(X)
         W(X)
         commit

可恢复的调度

在可恢复调度中,如果事务正在读取已由某个其他事务更新的值,则此事务只能在提交正在更新值的其他事务之后提交。

可恢复调度示例

这里TbTa使用W(X)X中进行了更改之后对X执行读取操作,因此Tb只能在Ta的提交操作之后提交。

Ta   Tb
-----    -----
R(X)    
W(X)    
         R(X)
         W(X)
         R(X)
commit  
         commit

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程