DDBMS - 事务处理系统



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

事务

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

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

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

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

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

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

事务操作

事务中执行的低级操作包括:

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

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

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

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

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

事务状态

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

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

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

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

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

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

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

State Transition Diagram

事务的理想属性

任何事务都必须维护ACID属性,即原子性、一致性、隔离性和持久性。

  • 原子性 - 此属性指出事务是处理的原子单元,也就是说,要么完全执行,要么根本不执行。不应该存在部分更新。

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

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

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

调度和冲突

在一个有多个并发事务的系统中,**调度**是操作的总执行顺序。给定一个包含n个事务(例如T1、T2、T3……Tn)的调度S;对于任何事务Ti,Ti中的操作必须按照调度S中规定的顺序执行。

调度的类型

有两种类型的调度:

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

Serial Schedules
  • 并行调度 - 在并行调度中,多个事务同时处于活动状态,即事务包含时间上重叠的操作。这在下图中显示:

Parallel Schedules

调度中的冲突

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

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

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

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

可串行化

‘n’个事务的**可串行化调度**是一个并行调度,它等效于包含相同‘n’个事务的串行调度。可串行化调度包含串行调度的正确性,同时确保并行调度的更好的CPU利用率。

调度的等价性

两个调度的等价性可以是以下类型:

  • 结果等价 - 产生相同结果的两个调度被称为结果等价。

  • 视图等价 - 以类似方式执行类似操作的两个调度被称为视图等价。

  • 冲突等价 - 如果两个调度包含相同的交易集并且具有相同的冲突操作对顺序,则称它们为冲突等价。

广告