DBMS - 事务



事务可以定义为一组任务。单个任务是最小的处理单元,不能再细分。

让我们来看一个简单的交易示例。假设银行职员将 500 卢比从 A 的账户转到 B 的账户。这个非常简单的小型交易涉及多个低级任务。

A 的账户

Open_Account(A)
Old_Balance = A.balance
New_Balance = Old_Balance - 500
A.balance = New_Balance
Close_Account(A)

B 的账户

Open_Account(B)
Old_Balance = B.balance
New_Balance = Old_Balance + 500
B.balance = New_Balance
Close_Account(B)

ACID 属性

事务是程序中非常小的单元,它可能包含多个低级任务。数据库系统中的事务必须维护原子性一致性隔离性持久性——通常称为 ACID 属性——以确保准确性、完整性和数据完整性。

  • 原子性 - 此属性规定必须将事务视为原子单元,即要么执行其所有操作,要么不执行任何操作。数据库中一定不能存在事务部分完成的状态。状态应在事务执行之前或事务执行/中止/失败之后定义。

  • 一致性 - 任何事务后,数据库都必须保持一致状态。任何事务都不应对数据库中驻留的数据产生任何不利影响。如果数据库在事务执行之前处于一致状态,则在事务执行之后也必须保持一致状态。

  • 持久性 - 数据库应该足够持久,即使系统发生故障或重启也能保存所有最新的更新。如果事务更新数据库中的一块数据并提交,则数据库将保存修改后的数据。如果事务提交但系统在数据写入磁盘之前发生故障,则系统恢复运行后将更新该数据。

  • 隔离性 - 在数据库系统中,多个事务同时并行执行时,隔离性属性规定所有事务都将被执行,就好像它是系统中唯一的事务一样。任何事务都不会影响任何其他事务的存在。

可串行化

当多个事务在多编程环境中由操作系统执行时,可能存在一个事务的指令与其他事务的指令交错的情况。

  • 调度 - 事务的按时间顺序执行序列称为调度。调度中可以有多个事务,每个事务包含许多指令/任务。

  • 串行调度 - 这是一种调度,其中事务以一种方式对齐,即一个事务首先执行。当第一个事务完成其周期后,则执行下一个事务。事务一个接一个地排序。这种类型的调度称为串行调度,因为事务以串行方式执行。

在多事务环境中,串行调度被视为基准。事务中指令的执行顺序不能更改,但是两个事务可以以随机方式执行其指令。如果两个事务相互独立并在数据的不同段上工作,则此执行不会造成任何损害;但是,如果这两个事务正在处理相同的数据,则结果可能会有所不同。这种不断变化的结果可能会使数据库处于不一致的状态。

为了解决这个问题,如果其事务是可串行化的或它们之间存在某种等价关系,我们允许并行执行事务调度。

等价调度

等价调度可以是以下类型:

结果等价

如果两个调度在执行后产生相同的结果,则称它们是结果等价的。它们可能对某些值产生相同的结果,而对另一组值产生不同的结果。这就是为什么这种等价通常不被认为很重要。

视图等价

如果两个调度中的事务以类似的方式执行类似的操作,则这两个调度将是视图等价的。

例如:

  • 如果 T 在 S1 中读取初始数据,则它也在 S2 中读取初始数据。

  • 如果 T 读取 J 在 S1 中写入的值,则它也读取 J 在 S2 中写入的值。

  • 如果 T 在 S1 中对数据值执行最终写入,则它也在 S2 中对数据值执行最终写入。

冲突等价

如果两个调度具有以下属性,则它们将是冲突的:

  • 两者都属于单独的事务。
  • 两者都访问相同的数据项。
  • 两者中至少一个是“写入”操作。

具有包含冲突操作的多个事务的两个调度被称为冲突等价,当且仅当:

  • 两个调度都包含相同的交易集。
  • 两个调度中都保持冲突操作对的顺序。

注意 - 视图等价调度是视图可串行化的,冲突等价调度是冲突可串行化的。所有冲突可串行化调度也是视图可串行化的。

事务状态

数据库中的事务可以处于以下状态之一:

Transaction States
  • 活动 - 在此状态下,正在执行事务。这是每个事务的初始状态。

  • 部分提交 - 当事务执行其最终操作时,据说它处于部分提交状态。

  • 失败 - 如果数据库恢复系统进行的任何检查失败,则事务据说处于失败状态。失败的事务无法继续进行。

  • 中止 - 如果任何检查失败并且事务已到达失败状态,则恢复管理器将撤消其在数据库上的所有写入操作,以使数据库恢复到事务执行之前的原始状态。处于此状态的事务称为中止的事务。数据库恢复模块可以在事务中止后选择以下两个操作之一:

    • 重新启动事务
    • 终止事务
  • 已提交 - 如果事务成功执行所有操作,则称其已提交。其所有效果现在已永久建立在数据库系统中。

广告