数据库管理系统中的事务管理:状态、类型和 ACID

⚡ 智能摘要

数据库事务管理将一个或多个数据库操作视为一个逻辑单元,该单元使数据库从一个一致状态转换到另一个一致状态。它依靠 ACID 属性、定义的事务状态和调度来保证并发访问的正确性。

  • 🔁 核心单元: 事务将相关的读取和写入操作分组,以便它们一起成功或失败,绝不会半途而废。
  • 🧪 酸性物质: Atom冰冷性、一致性、隔离性和耐用性保证即使在故障或并发情况下也能获得正确的结果。
  • 🚦 交易状态: 活动状态、部分提交状态、已提交状态、失败状态和已终止状态描述了事务的生命周期。
  • 👥 为什么需要并发: 由于数据库是共享的,因此会同时运行许多事务,这些事务不能互相干扰,以免数据相互破坏。
  • 📋 时间表: 调度程序对并行事务的操作进行排序,同时保持每个事务的内部顺序。
  • 🔗 可串行化: 当并发调度的结果等于某种串行执行的结果时,该并发调度才是正确的,判断标准是冲突或视图等效性。
  • ↩️ Recovery: 失败的事务会被回滚,因此其部分写入永远不会到达已提交的数据库。

数据库管理系统中的事务管理

什么是数据库事务?

A 数据库事务 数据库事务是数据库管理系统(DBMS)中的一个逻辑处理单元,它包含一个或多个数据库访问操作。简而言之,数据库事务代表了任何企业实际发生的事件。

在数据库管理系统(DBMS)中,所有发生在事务开始语句和结束语句之间的数据库访问操作都被视为一个逻辑事务。在事务执行期间,数据库处于不一致状态。只有在事务提交后,数据库状态才会从一个一致状态更改为另一个一致状态。

数据库事务在一致状态之间移动
数据库事务

数据库事务相关事实

  • 事务是一个程序单元,其执行可能会或不会改变数据库的内容。
  • DBMS 中的事务概念是作为一个单独的单元执行的。
  • 如果数据库操作不更新数据库而只是检索数据,这种类型的事务称为只读事务。
  • 成功的事务可以将数据库从一个一致性状态更改为另一个一致性状态。
  • 数据库管理系统事务必须具备原子性、一致性、隔离性和持久性。
  • 如果数据库在事务之前处于不一致状态,则事务之后它将保持不一致状态。

为什么事务需要并发性?

数据库是一种共享资源,可供多个用户和进程同时使用。例如,银行系统、铁路和航空订票系统、股票市场监控系统以及超市库存和结账系统等都属于数据库。

不管理并发访问可能会产生以下问题:

  • 硬件故障和系统崩溃。
  • 并发执行同一事务, 僵局或者运行缓慢。

控制这种共享访问权限是……的职责。 并发控制它使用锁定和时间戳来安全地交错事务。在此之前,了解事务所经历的状态很有帮助。

交易状态

DBMS 中事务概念的各种状态如下所列:

描述
活跃状态 当执行过程开始时,事务进入活动状态。在此状态下,可以执行读取或写入操作。
部分承诺 事务结束后,事务将进入部分提交状态。
承诺状态 当事务达到已提交状态时,表示其执行已成功完成,并且其所有更改都将永久记录到数据库中。
失败状态 如果任何一项检查失败,或者交易在活动状态下被中止,则该交易被视为失败。
终止状态 当事务离开系统且无法重新启动时,事务状态即达到终止状态。

数据库事务的状态转换图

让我们来学习一下 状态转换图 这突出了交易如何在这些不同状态之间移动。

  1. 事务一旦开始执行,即变为活动状态。它可以发出读取或写入操作。
  2. 读取和写入操作完成后,事务达到部分提交状态。
  3. 接下来,一些恢复协议需要确保系统故障不会导致事务的更改无法永久记录。如果此检查成功,则事务提交并进入已提交状态。
  4. 如果检查失败,则交易进入失败状态。
  5. 如果事务在执行过程中被中止,则会进入失败状态。此时应回滚事务,以撤销其对数据库的写入操作。
  6. 终止状态是指事务离开系统。

酸的性质有哪些?

酸性质 用于在事务处理期间维护数据库的完整性。在数据库管理系统中,ACID 代表…… A连贯性, C坚持, I解脱,和 D耐用性。

  • Atom冰城: 交易是单个操作单元。您可以完全执行它,也可以根本不执行它。不能部分执行。
  • 坚持是关键 一旦事务执行,它就应该从一个一致状态转移到另一个一致状态。
  • 隔离: 事务应与其他事务隔离执行。在并发执行期间,同时执行的事务的中间结果不应相互共享。
  • 高耐用性: 事务成功完成后,即使系统发生故障,数据库中的更改也应该保留下来。

数据库管理系统中的 ACID 属性示例

以下是数据库管理系统中 ACID 属性的一个示例:

Transaction 1: Begin X=X+50, Y = Y-50 END
Transaction 2: Begin X=1.1*X, Y=1.1*Y END

交易 1 是将 50 美元从账户 X 转移到账户 Y。

交易 2 是向每个账户存入 10% 的利息。

如果两笔交易同时提交,则无法保证交易 1 会在交易 2 之前执行,反之亦然。无论顺序如何,结果都必须如同两笔交易依次发生一样。

交易类型

按应用领域划分:

  • 非分布式与分布式。
  • 补偿交易。
  • 交易时间。
  • 在线教学与批量教学。

基于行动:

  • 两步走。
  • 受限制的。
  • 行动模式。

基于结构:

  • 扁平或简单事务:由一系列在开始操作和结束操作之间执行的原始操作组成。
  • 嵌套事务:包含其他事务的事务。
  • 流程。

什么是时间表?

调度是将多个并行事务合并成一个组,并逐一执行的过程。它应该保持每个事务中指令出现的顺序。如果两个事务同时执行,一个事务的结果可能会影响另一个事务的输出。

例如:

Initial Product Quantity is 10
Transaction 1: Update Product Quantity to 50
Transaction 2: Read Product Quantity

如果事务2在事务1之前执行,会读到过期的产品数量信息,因此需要制定调度计划。

数据库中的并行执行是不可避免的。但只有当同时执行的事务之间存在等价关系时,才允许并行执行。这种等价关系有三种类型。

结果等效性: 如果两个调度程序执行后显示相同的结果,则称为结果等效调度程序。它们对于某些值可能产生相同的结果,而对于另一组值则产生不同的结果。例如,一个事务更新产品数量,而另一个事务更新客户详细信息。

视图等效性: 当两个计划中的事务执行类似的操作时,就会出现视图等效性。例如,一个事务将产品详细信息插入产品表,而另一个事务将产品详细信息插入归档表。事务本身相同,但表不同。

冲突等效性: 在这种情况下,两个事务更新或查看了同一组数据。由于执行顺序会影响输出结果,因此事务之间存在冲突。

什么是可序列化?

可串行性是指寻找一种并发调度方案,使其输出结果与事务按顺序执行的串行调度方案相等。根据调度方案类型的不同,可串行性分为两种类型:

  • 冲突可串行性。
  • 查看可串行性。

两者在判断等效性的严格程度上有所不同,如下所述。

方面 冲突可串行性 视图可串行化
基地 冲突操作的顺序 读取自和最终写入关系
《测试》(Test) 优先级图必须是无环的。 视为与串行调度等效
严格 更严格,一个子集 范围更广,包括盲人写作。
检查费用 高效 计算难度大

每个冲突可序列化调度表也是视图可序列化的,但反过来却不行,这就是为什么冲突可序列化是数据库管理系统应用的实际测试。

常见问题

提交操作会将事务的更改永久保存到数据库中。回滚操作则会撤销自事务开始以来的所有更改,将数据库恢复到事务开始前的一致状态。

Atom原子性。如果在执行过程中发生崩溃,原子性会确保已完成的部分工作被丢弃,因此事务会被视为从未运行过。持久性则会在恢复后保护已提交的工作。

AI 分析锁等待和死锁图,以发现阻塞其他事务的交易,然后建议隔离级别或索引更改,以减少争用而不降低正确性。

在某种程度上是这样。通过学习过去死锁之前的锁请求模式,模型可以及早标记出有风险的事务组合,让调度器在循环形成之前延迟或重新排序。

串行调度会在下一个事务开始之前完整执行完一个事务,因此不会出现交错执行导致数据损坏的情况。它的速度较慢,所以目标是实现可串行化的并发调度。

总结一下这篇文章: