数据库—并发调度的可串行性
2017-12-27 15:00
183 查看
1.可串行化调度
数据库管理系统对并发事务不同的调度可能会产生不同的结果,比如两个事务T1和T2,先执行T1或者先执行T2产生的结果可能是不一样的。由于串行调度没有事务间的相互干扰,所以串行调度是正确的。另外,执行结果等价于串行调度的调度也是正确的,称为可串行化调度。可串行化(Serializable)调度
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这样的调度策略为可串行化调度。
可串行性(Serializability)
可串行性是并发事务正确调度的准则。可串行性调度规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。
比如,两个事务的并发调度的某一执行方式,与先执行T1后执行T2(或先执行T2后执行T1)的结果是一样的,称这一调度符合可串行化调度。
并发控制除了要保证数据的一致性之外,还要保证事务的调度是可串行化调度。
2.冲突可串行化调度
冲突可串行化,是一个比可串行化更严格的条件!冲突操作:是指不同的事务对同一数据的读写操作和写写操作:
Ri(x)与Wj(x) /*事务Ti读x,Tj写x,其中i≠j*/
Wi(x)与Wj(x) /*事务Ti写x,Tj写x,其中i≠j*/
冲突操作的特点:涉及同一个数据库元素, 并且至少有一个是写操作。
不冲突操作:
ri(X); rj(X) 两个相同对象的读操作不冲突
wi(X); rj(Y), X不等于Y,两个不同对象的操作不冲突
wi(X); wj(Y), X不等于Y,两个不同对象的操作不冲突
不能交换(Swap)的动作:
同一事务的两个操作不能交换;
不同事务的冲突操作不能交换;
例如:Ri(x)与Wj(x)
Wi(x)与Wj(x)
冲突可串行化
一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度。若一个调度是冲突可串行化,则一定是可串行化的调度。
[例] 有3个事务的一个调度r3(B) r1(A) w3(B) r2(B) r2(A) w2(B)r1(B) w1(A),判断该调度是否是冲突可串行化的调度。
解:Sc1 = r3(B) r1(A) w3(B)r2(B) r2(A) w2(B) r1(B) w1(A)
由于r1(A)和w3(B)是对不同事务间的操作,所以不冲突,两个事务可以交换,由此得到:
r3(B) w3(B) r1(A) r2(B)r2(A) w2(B) r1(B) w1(A)
由于r1(A)和r2(B)r2(A) w2(B),要么都是对同一操作的读操作,要么是对不同对象的读写操作,所以不冲突,r1(A)可以与r2(B) r2(A) w2(B)交换,因此得到:
r3(B) w3(B) r2(B) r2(A) w2(B) r1(A)r1(B) w1(A)
所以: Sc2 = r3(B) w3(B) r2(B) r2(A)w2(B) r1(A) r1(B) w1(A) ----> T3 T2 T1
因此Sc1是冲突可串行化的调度。
再例如:
Sd=r1(A)w1(A)r2(A)w2(A)r2(B)w2(B)r1(B)w1(B)
此例无论如何都不能通过无冲突交换将Sd变换为串行调度,因此Sd不是冲突可串行化的调度。
3.可串行化调度与冲突可串行化调度之间的关系
冲突可串行化调度一定是可串行化调度,但冲突可串行化调度只是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。[例]有3个事务,T1=W1(Y)W1(X),T2=W2(Y)W2(X),T3=W3(X)
调度L1=W1(Y)W1(X)W2(Y)W2(X)W3(X)是一个串行调度。
调度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)不满足冲突可串行化。
但是调度L2是可串行化的,因为L2执行的结果与调度L1相同,Y的值都等于T2的值,X的值都等于T3的值。
相关文章推荐
- 数据库 - 并发调度的可串行性
- 并发调度的可串行性
- 并发调度的可串行性
- 并发调度的可串行性
- 数据库 并发调度技术 四种问题 三级封锁协议
- 并发调度的可串行性
- 数据库 之 并发调度
- 三级封锁协议和并发调度的可串行性
- 数据库之并发控制调度
- 多线程并发操作数据库以及数据库升级
- 大数据量高并发的数据库优化详解
- boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。
- 高并发系统数据库设计
- 数据库并发操作的一致性问题
- Quartz.net基于数据库的任务调度管理(Only.Jobs)
- Postgres 数据库并发控制配置
- 大量并发SQL导致数据库性能问题诊断优化
- java处理高并发高负载类网站中数据库的设计方法
- 数据库高并发解决方法总结
- 总结:如何使用redis缓存加索引处理数据库百万级并发