DDBMS - 事务处理系统


本章讨论事务处理的各个方面。我们还将研究事务中包含的低级任务、事务状态和事务属性。在最后一部分中,我们将研究调度和调度的可串行性。

交易

事务是包含数据库操作集合的程序,作为数据处理的逻辑单元执行。事务中执行的操作包括一项或多项数据库操作,例如插入、删除、更新或检索数据。它是一个Atomics过程,要么完全执行完成,要么根本不执行。仅涉及数据检索而不涉及任何数据更新的事务称为只读事务。

每个高级操作可以分为多个低级任务或操作。例如,数据更新操作可以分为三个任务 -

  • read_item() - 将数据项从存储读取到主内存。

  • modify_item() - 更改主内存中项目的值。

  • write_item() - 将修改后的值从主内存写入存储。

数据库访问仅限于 read_item() 和 write_item() 操作。同样,对于所有事务,读取和写入构成了基本的数据库操作。

交易操作

事务中执行的低级操作是 -

  • begin_transaction - 指定事务执行开始的标记。

  • read_item 或 write_item - 作为事务的一部分,可能与主内存操作交织的数据库操作。

  • end_transaction - 指定事务结束的标记。

  • commit - 指定事务已完全成功完成并且不会被撤消的信号。

  • rollback - 一个信号,指定事务已不成功,因此数据库中的所有临时更改都被撤消。已提交的事务无法回滚。

交易状态

事务可能会经历五种状态的子集:活动、部分提交、已提交、失败和中止。

  • Active - 事务进入的初始状态是活动状态。事务在执行读、写或其他操作时保持此状态。

  • 部分提交- 事务在执行事务的最后一条语句后进入此状态。

  • 已提交- 事务在成功完成事务并且系统检查已发出提交信号后进入此状态。

  • 失败- 当发现正常执行无法继续或系统检查失败时,事务从部分提交状态或活动状态变为失败状态。

  • 已中止- 这是事务在失败后回滚并且数据库已恢复到事务开始之前的状态后的状态。

以下状态转换图描述了事务中的状态以及导致状态更改的低级事务操作。

状态转移图

交易的理想属性

任何事务都必须保持 ACID 属性,即。Atomics性、一致性、隔离性和持久性。

  • Atomics性- 此属性表明事务是处理的Atomics单元,也就是说,它要么全部执行,要么根本不执行。不应存在​​部分更新。

  • 一致性- 事务应该将数据库从一种一致状态转变为另一种一致状态。它不应该对数据库中的任何数据项产生不利影响。

  • 隔离- 一笔交易应该像系统中唯一的交易一样执行。不应有来自同时运行的其他并发事务的任何干扰。

  • 持久性- 如果提交的事务带来了更改,则该更改应该在数据库中持久存在,并且在发生任何故障时不会丢失。

时间表和冲突

在具有多个同时事务的系统中,调度操作执行的总顺序。给定一个包含 n 个事务的时间表 S,例如 T1、T2、T3…………..Tn;对于任何事务 Ti,Ti 中的操作必须按照时间表 S 中的规定执行。

时间表的类型

有两种类型的时间表 -

  • 串行调度- 在串行调度中,在任何时间点,只有一个事务处于活动状态,即没有事务重叠。如下图所示 -

连续剧时间表
  • 并行计划- 在并行计划中,多个事务同时处于活动状态,即事务包含有时重叠的操作。如下图所示 -

并行时间表

时间表中的冲突

在由多个事务组成的调度中,当两个活动事务执行不兼容的操作时,就会发生冲突。当以下三个条件同时存在时,两个操作被称为冲突 -

  • 这两个操作是不同事务的一部分。

  • 这两个操作访问相同的数据项。

  • 至少其中一个操作是write_item()操作,即它尝试修改数据项。

可串行化

“n”个事务的可串行调度是并行调度,其等效于由相同的“n”个事务组成的串行调度。可串行调度包含串行调度的正确性,同时确定并行调度更好的 CPU 利用率。

时间表的等效性

两个时间表的等价可以是以下类型 -

  • 结果等效- 产生相同结果的两个计划被称为结果等效。

  • 视图等效- 以相似方式执行相似操作的两个计划被称为视图等效。

  • 冲突等价- 如果两个计划都包含相同的事务集并且具有相同的冲突操作对顺序,则称两个计划是冲突等价的。