DBMS中的冲突序列化

如中所述 并发控制 串行调度的资源利用率较低,吞吐量较低。为了改进它,两个或多个事务同时运行。但事务的并发性可能会导致数据库中的不一致性。为了避免这种情况,我们需要检查这些并发计划是否可序列化。

null

冲突可序列化: 如果可以通过交换非冲突操作将计划转换为串行计划,则该计划称为冲突序列化。

冲突操作: 如果所有条件都满足,则两个操作称为冲突:

  • 它们属于不同的交易
  • 它们对同一数据项进行操作
  • 其中至少有一个是写操作

例如:——

  • 矛盾的 操作对(R 1. (A) ,W 2. (A) )因为它们属于同一数据项A上的两个不同事务,其中一个是写操作。
  • 同样地 1. (A) ,W 2. (A) )和(W) 1 (A) ,R 2. (A) )成对的也是 矛盾的 .
  • 另一方面 1. (A) ,W 2. (B) )这对是 无冲突 因为它们对不同的数据项进行操作。
  • 同样地,((W) 1 (A) ,W 2. (B) )这对是 没有冲突。

考虑以下时间表:

S1: R1(A), W1(A), R2(A), W2(A), R1(B), W1(B), R2(B), W2(B)

如果 还有 J 事务中有两个操作,O j (O) 在O之前执行 J ),同样的顺序也会出现在时间表中。使用此属性,我们可以得到两个附表S1的事务,如下所示:

T1: R1(A), W1(A), R1(B), W1(B)T2: R2(A), W2(A), R2(B), W2(B)

可能的序列计划是:T1->T2或T2->T1

-> 交换非冲突操作 s R 2 (A) 和R 1. (B) 在S1中,时间表变为,

S11: R1(A), W1(A), R1(B), W2(A), R2(A), W1(B), R2(B), W2(B)

->同样,s 切换非冲突操作 W 2. (A) 而W 1. (B) 在S11中,时间表变为,

S12: R1(A), W1(A), R1(B), W1(B), R2(A), W2(A), R2(B), W2(B)

S12是串行调度,其中在开始T2的任何操作之前执行T1的所有操作。由于S已通过交换S1的非冲突操作转换为串行调度S12,S1可冲突序列化。

让我们再看一个时间表:

S2: R2(A), W2(A), R1(A), W1(A), R1(B), W1(B), R2(B), W2(B)

两项交易将是:

T1: R1(A), W1(A), R1(B), W1(B)T2: R2(A), W2(A), R2(B), W2(B)

可能的序列计划是:T1->T2或T2->T1

原来的时间表是:

S2: R2(A), W2(A), R1(A), W1(A), R1(B), W1(B), R2(B), W2(B)

交换非冲突操作 1 (A) 和R 2. (B) 在S2中,时间表变为,

S21: R2(A), W2(A), R2(B), W1(A), R1(B), W1(B), R1(A), W2(B)

类似地,交换不冲突的操作 1. (A) 而W 2. (B) 在S21中,时间表变为,

S22: R2(A), W2(A), R2(B), W2(B), R1(B), W1(B), R1(A), W1(A)

在附表S22中,首先执行T2的所有操作,但T1的操作不符合顺序(顺序应为R) 1. (A) ,W 1. (A) ,R 1. (B) ,W 1. (B) )。所以S2是不可冲突序列化的。

冲突等价物: 当一个调度可以通过交换非冲突操作转换为另一个调度时,两个调度被称为冲突等价。在上面讨论的示例中,S11相当于S1(S1可以通过交换非冲突操作转换为S11)。类似地,S11相当于S12,依此类推。

注1: 虽然S2不可冲突序列化,但它仍然与S21和S21冲突等价,因为S2可以通过交换非冲突操作转换为S21和S22。

注2: 可串行化的调度总是与冲突的调度等价。上面讨论的S1调度(可冲突序列化)相当于串行调度(T1->T2)。

问题: 考虑以下两个交易的日程安排。以下哪项陈述是正确的?

S1:R 1. (十) R 1 (Y) R 2. (十) R 2 (Y) W 2. (Y) W 1. (十) S2:R 1. (十) R 2 (十) R 2. (Y) W 2. (Y) R 1. (Y) W 1. (十)

  • S1和S2都是可冲突序列化的
  • 只有S1是可序列化冲突的
  • 只有S2是可序列化冲突的
  • 没有一个

[GATE 2007]

解决方案: 给定时间表的两个事务是:

 T1: R1(X) R1(Y) W1(X) T2: R2(X) R2(Y) W2(Y)

让我们首先检查S1的可序列化性:

S1: R1(X) R1(Y) R2(X) R2(Y) W2(Y) W1(X)

要将其转换为串行调度,我们必须交换无冲突的操作,以便S1与串行调度T1->T2或T2->T1等价。在这种情况下,要将其转换为串行计划,我们必须交换R 2. (十) 而W 1. (十) 但它们相互矛盾。所以S1不能转换成一个连续的时间表。

现在,让我们检查S2的可序列化性:

S2: R1(X) R2(X) R2(Y) W2(Y) R1(Y) W1(X)

交换非冲突操作 1. (十) 和R 2 (十) 对于S2,我们得到

S2’: R2(X) R1(X) R2(Y) W2(Y) R1(Y) W1(X)

同样,交换不冲突的操作 1. (十) 和R 2. (Y) 当然,我们得到了

S2’’: R2(X) R2(Y) R1(X) W2(Y) R1(Y) W1(X)

同样,交换不冲突的操作 1. (十) 而W 2. (Y) 对于S2”,我们得到

S2’’’: R2(X) R2(Y) W2(Y) R1(X) R1(Y) W1(X)

这相当于序列计划T2->T1。

所以 正确的选项是C .只有S2可序列化冲突。

相关文章: 视图可序列化性 测试冲突可序列化性的优先图

文章由Sonal Tuteja提供。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享