DBMS交易

所有的海狸! 可以说,我们正在积极扩展我们的课程范围,现在,我们很高兴地推出一个新课程: “关系DBMS” 。 该课程由Linux管理员课程的一位主要老师Alexey Tsykunov创建 。 否则,一切将与往常一样:实用程序和公开课程 ,其中Alex将共享课程本身未包含的不同内容。

走吧

事务可以定义为一组任务,任务的完成是正确完成事务的前提。 单个任务是最小的不可分割的数据更改块。

这是一个简单交易的例子。 假设一家银行员工从帐户A转移500卢比到帐户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),以确保数据的准确性,完整性和完整性:

  • 原子性 -此属性表明事务应被视为一个原子单位,即它的所有操作都已执行,或者不是一个操作。 数据库中不应存在部分完成事务的状态。 必须在事务开始之前或事务完成/中断/失败之后设置状态。
  • 一致性 -此属性指示在任何事务之后数据库应保持一致状态。 任何事务都不应对数据库中的数据产生负面影响。 如果数据库在事务完成之前处于一致状态,则它应该在事务完成之后进入数据库。
  • 隔离 -在数据库系统中,同时并行执行多个事务时,隔离属性指示每个事务将被执行,就好像它是系统中唯一的事务一样被执行。 任何交易都不应影响其他交易的存在。
  • 弹性 -此属性指示数据库必须足够稳定才能存储所有最新更新,即使系统出错或重新引导也是如此。 如果事务导致数据库中数据片段的更新,则这些更改应继续存储在数据库中。 如果进行了事务,但是在将数据写入磁盘之前系统崩溃,则应在系统重新启动后立即更新数据。

序列化

当操作系统在多程序环境中执行多个事务时,一个事务的指令可能会与另一个事务的指令混合在一起。

  • 时间表是按时间顺序执行的一系列交易。 时间表可以包含许多事务,每个事务都包含多个指令/任务。
  • 顺序时间表是安排事务的时间表,以便依次完成每个事务。 仅仅由于一致的执行模式,调度被称为顺序调度。

在多事务环境中,顺序计划被视为基准。 事务中指令的执行顺序不能更改,但是两个事务中指令的执行可能是随机的。 当两个事务相互独立并且在不同的数据段上工作时,执行无害。 但是如果它们使用相同的数据,则结果可能会有所不同,这可能会导致数据库进入不一致状态。

为了解决此问题,在事务被序列化或具有某些等价关系的情况下,我们允许并行执行事务调度。

等效时间表

等效计划可以是以下类型:

结果的等价

如果执行后的两个调度产生相同的结果,则它们被认为是等效的。 对于某些值,结果可能相同,而对于另一组值,结果可能不同。 因此,通常认为这种等效不重要。

演示等效

如果每个日程表中的事务以相似的方式执行相似的操作,则两个日程表在表示上被认为是等效的。

例如:

  • 如果T在S1中读取原始数据,那么它也在S2中读取原始数据。
  • 如果T读取了J在S1中写入的值,那么它也读取了J在S2中写入的值。
  • 如果T完成将值写入S1,那么它也完成将值写入S2。

冲突对等

如果两个日程表具有以下属性,则它们将冲突:

  • 它们属于不同的交易。
  • 他们访问相同的数据。
  • 其中至少有一个是“写”操作。

仅在以下情况下,具有多个具有冲突操作的事务的两个计划才被视为等同于冲突:

  • 两个计划都包含相同的事务集。
  • 两个计划都支持冲突操作对的顺序。

–与演示文稿等效的日程表可以在演示文稿中序列化,而与冲突等效的日程表可以冲突序列化。 所有可序列化冲突的计划都是可呈现序列化的。

交易状态

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



  • 活动(Active) -在此状态下,事务开始执行。 这是任何交易的初始状态。
  • 部分承诺 -当事务完成其最终操作时,它被认为处于部分完善的状态。
  • 失败-如果数据库恢复系统执行一项检查失败,则事务被视为失败。 这样的交易无法继续。
  • 已中止 -如果某些验证失败并且事务进入失败状态,则恢复管理器将回滚数据库中的所有写操作,以使其恢复到事务开始之前的原始状态。
    在这种状态下的事务被视为中断。 事务中断后,数据库恢复模块可以选择以下两种操作之一:

    • 重新启动事务;
    • 取消交易。
  • 完美 -如果交易成功完成了所有操作,则认为是完美。 其所有影响都永久记录在数据库系统中。

结束

与往常一样,我们正在等待评论,这个问题可以在这里以及与Alexei 的公开课中提出

Source: https://habr.com/ru/post/zh-CN423309/


All Articles