并发调度的可串行性

转载地址:http://course.cug.edu.cn/cug/database/netclass/CHAPT8/8.5/8.5.htm

计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能会产生不同的结果,那么哪个结果是正确的,哪个是不正确的呢?
    如果一个事务运行过程中没有其他事务同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的。因此将所有事务串行起来的调度策略一定是正确的调度策略。虽然以不同的顺序串行执行事务可能会产生不同的结果,但由子不会将数据库置于不一致状态,所以都是正确的。
    定义 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。
    可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。
    例如,现在有两个事务,分别包含下列操作:
        事务T1:读B;A=B+1;写回A;
        事务T2:读A;B=A+1;写回B;
    假设A,B的初值均为2。按T1→T2次序执行结果为A=3,B=4;按T2→T1次序执行结果为B=3,A=4。
    图8.5给出了对这两个事务的三种不同的调度策略。
    图8.5(a)和(b)为两种不同的串行调度策略,虽然执行结果不同,但它们都是正确的调度;图8.5(c)产两个事务是交错执行的;由于其执行结果与(a),(b)的结果都不同,所以是错误的调度;图8.5(d)中两个事务也是交错执行的,其执行结果与串行调度(a)执行结果相同,所以是正确的调度。
图8.5

    为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度
是可串行化的。
    从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可取的,这使用户不能充分共享数据库资源。目前DBMS普遍采用封锁方法实现并发操作调度的可串行性,从而保证调度的正确性。
    两段锁(Two-Phase Locking,简称 2PL)协议就是保证并发调度可串行性的封锁协议。
    除此之外还有其他一些方法,如时标方法、乐观方法等来保证调度的正确性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值