根据可恢复性特征化调度(DBMS)2025年4月6日 | 阅读 5 分钟 在本文中,我们将理解DBMS中基于可恢复性来描述调度的概念。 引言在此,我们将讨论并发执行期间事务失败的影响。如果事务失败,我们需要撤销事务的影响,并将数据库恢复到事务启动之前的S一致状态。因此,在一个允许并发执行的系统中,有必要确保所有依赖于中止事务的事务也应该中止。重要的是要指出那些恢复相对简单的调度。这些描述实际上并不提供恢复算法,而只是理论上描述不同类型的调度。 调度是什么意思?并发运行事务的操作执行顺序决定了调度的类型。当事务同时运行时,它们的操作可能会相互冲突。如果两个操作满足以下条件,则称它们在调度中发生冲突:
在讨论不同类型的调度之前,我们应该了解完整调度的概念。 如果满足以下条件,则调度称为完整调度:
通常,在事务处理系统中很难遇到完整的调度,因为新事务不断地提交到系统。调度可以根据所有事务是否成功完成或发生故障来描述。 发生一些故障的调度是基于可恢复性概念的。 调度有三种类型
让我们一一详细讨论。 可恢复调度我们必须确保一旦事务 T 提交,它就不应该再需要回滚 T。理论上,符合此规则的调度称为可恢复调度,不符合此规则的调度称为不可恢复调度,因此不应允许。 以下调度是可恢复调度
以下调度是不可恢复调度
假设在调度 S2 中,事务 T1 和 T2 并发运行,事务 T2 只对数据项 A 执行读操作,即 Read (A)。假设 调度 允许事务 T2 在提交操作后立即提交。因此,我们发现事务 T2 在 T1 之前提交。现在假设事务 T1 在提交之前失败,因此我们需要回滚到事务 T1 开始之前的先前一致状态,但 T2 已经读取了 T1 写入的数据项 A。因此,我们还必须回滚 T2 以确保原子性,但这不可能,因为事务 T2 已经提交,因此如果事务 T1 失败,则无法正确恢复。因此,这种情况是不可恢复调度的示例,不应允许。 由于大多数数据库系统要求所有调度都必须是可恢复的。因此,在可恢复调度中,每一对事务 T1 和 T2 读取的数据项是 T1 之前写入的,T1 的提交操作必须出现在 T2 的提交操作之前,如调度 S1 所示。 在调度 S1 中,事务 T1 的所有操作在 T2 读取 T1 写入的数据项之前完成并提交。 无级联调度在可恢复调度中,已提交的事务永远不需要回滚。当大量事务在调度中并发运行时,可能会出现一种情况,即一个事务的失败导致大量依赖事务的回滚。这种一系列回滚的现象称为级联回滚。 以下调度是级联调度
在这个调度 S1 中,事务 T1 写入数据项 A 的值,该值被事务 T2 读取,事务 T2 写入数据项 B 的值,该值被事务 T3 读取。现在假设在某个时候,事务 T1 失败。因此事务 T1 应该回滚。由于 T2 依赖于 T1,T3 依赖于 T2,所以这些依赖事务也应该回滚。 级联回滚是不可取的,因为它可能非常耗时,因为大量事务必须回滚,因此最好将调度限制为不会发生级联回滚的调度,此类调度称为无级联调度。 如果对于每一对事务 T1 和 T2,T2 读取了 T1 之前写入的数据项,则 T1 的提交操作出现在 T2 的读取操作之前,则可恢复调度称为无级联调度。 因此,在调度 S1 中,事务 T1 必须在 T2 读取事务 T1 中写入的数据项之前提交,并且事务 T2 必须在事务 T3 读取事务 T2 写入的数据项 B 之前提交。 所以我们可以得出结论,每一个非级联调度也是可恢复的严格调度。 严格调度这是一种比可恢复和非级联调度更严格的调度,称为严格调度。在这种调度中,事务不能读取或写入数据项,直到最后写入该数据项的事务完成或中止。严格调度简化了恢复过程。 在此调度中,撤销中止事务的写入操作很容易,因为只需恢复数据项的旧值。此过程始终适用于严格调度,但不适用于可恢复或非级联调度。 以下调度不是严格调度
以下调度是严格调度
调度 S1 不是严格调度,因为它允许事务 T2 写入数据项 A,尽管事务 T1 写入 A 尚未提交或中止,这违反了严格调度的定义。严格调度意味着可恢复和非级联调度,但反之则不成立。 下一主题磁盘块的缓存 |
我们请求您订阅我们的新闻通讯以获取最新更新。