如中所述 并发控制 串行调度的资源利用率较低,吞吐量较低。为了改进它,两个或多个事务同时运行。但事务的并发性可能会导致数据库中的不一致性。为了避免这种情况,我们需要检查这些并发计划是否可序列化。
冲突可序列化: 如果可以通过交换非冲突操作将计划转换为串行计划,则该计划称为冲突序列化。
冲突操作: 如果所有条件都满足,则两个操作称为冲突:
- 它们属于不同的交易
- 它们对同一数据项进行操作
- 其中至少有一个是写操作
例如:——
- 矛盾的 操作对(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 我
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提供。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论