并发调度的可串行性
数据库管理系统对并发事务的不同调度会产生不同的结果。那么什么样的并发调度才是正确的?
答:结果和串行调度是一样的是正确的,称为可串行化调度
可串行化调度
概念:多个事务并发执行是正确的,当且仅当其结果与按某一次序的串行地执行这些事务的结果是相同的。
可串行性 是并发事务正确调度的准则,按照这个准则一个给定的并发调度,当且仅当它是可串行化的,才认为它是正确调度。
例子: 现在两个事务
事务T1 B := A - 1 写回A
事务T2 A := B - 1 写回B
冲突可串行化调度
冲突操作: 不同事务对同一数据的读写和写写操作。
R
i
(
A
)
R_i(A)
Ri(A)
W
j
(
A
)
W_j(A)
Wj(A)
W
i
(
A
)
W_i(A)
Wi(A)
W
j
(
A
)
W_j(A)
Wj(A)
- 除读写和写写操作,其他操作都是不冲突调度
- 不同事务的冲突操作和同一事务的不同操作是不能交换的
R i ( A ) R_i(A) Ri(A) W j ( A ) W_j(A) Wj(A) T i T_i Ti读A的数据会变化
一个调度在保证冲突操作次序不变的情况下通过交换两个不冲突的操作得到另一个Sc‘,如果Sc’是串行的,我们叫Sc冲突可串行化调度。
如果一个调度是冲突可串行化的,那么它一定是可串行的
例题:
现有调度
S
c
1
=
r
1
(
A
)
w
1
(
A
)
r
2
(
A
)
w
2
(
A
)
r
1
(
B
)
w
1
(
B
)
r
2
(
B
)
w
2
(
B
)
Sc_1 = r_1(A)w_1(A)r_2(A)w_2(A)r_1(B)w_1(B)r_2(B)w_2(B)
Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)
总结一些规则:
- 不同事务,同一数据,读写,写读,写写不可交换
- 同一事务,不同数据,都不可交换
- 不同事务,不同数据,随意交换
冲突可串行化是可串行化的充分条件。不是必要条件。也就是说存在可串行化的调度不是冲突可串行化调度。
例:
T
1
=
w
1
(
Y
)
w
1
(
X
)
T
2
=
w
2
(
Y
)
w
2
(
X
)
T
3
=
w
3
(
X
)
T_1 = w_1(Y)w_1(X)\quad T_2=w_2(Y)w_2(X)\quad T_3=w_3(X)
T1=w1(Y)w1(X)T2=w2(Y)w2(X)T3=w3(X)
调度
L
1
=
w
1
(
Y
)
w
1
(
X
)
w
2
(
Y
)
w
2
(
X
)
w
3
(
X
)
L_1 = w_1(Y)w_1(X)w_2(Y)w_2(X)w_3(X)
L1=w1(Y)w1(X)w2(Y)w2(X)w3(X)是一个串行调度
调度
L
2
=
w
1
(
Y
)
w
2
(
Y
)
w
1
(
X
)
w
2
(
X
)
w
3
(
X
)
L_2 = w_1(Y)w_2(Y)w_1(X)w_2(X)w_3(X)
L2=w1(Y)w2(Y)w1(X)w2(X)w3(X)不是以冲突可串行化调度。但它是可串行化调度,因为它的执行结果和
L
1
L_1
L1一样。
以上内容基于圣才教育数据库系统概论ppt 修改整理