首页 理论教育并发调度的可串行性|数据库技术与应用教程

并发调度的可串行性|数据库技术与应用教程

【摘要】:多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,称这种调度为可串行化的调度。目前的数据库管理系统普遍采用封锁方法来实现并发操作的可串行性,从而保证调度的正确性。两段锁协议是保证并发调度的可串行性的封锁协议。图7—12并发事务的不同调度

计算机系统对并发事务中的操作的调度是随机的,而不同的调度会产生不同的结果,那么哪个结果是正确的,哪个结果是不正确的?直观地说,如果多个事务在某个调度下的执行结果与这些事务在某个串行调度下的执行结果相同,那么这个调度就一定是正确的。因为所有事务的串行调度策略一定是正确的调度策略。虽然以不同的顺序串行执行事务可能会产生不同的结果,但都不会将数据库置于不一致的状态,因此都是正确的。

多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,称这种调度为可串行化的调度。

可串行性是并发事务正确性的准则,根据这个准则可知,一个给定的并发调度,当且仅当它是可串行化的调度时,才认为是正确的调度。

例如,假设有两个事务,分别包含如下操作:

事务T1:A=B+1

事务T2:B=A+1

假设A、B的初值均为4,如果按T1→T2的顺序执行,则结果为A=5,B=6;如果按T2→T1的顺序执行,则结果为A=6,B=5。则当并发调度时,如果执行的结果是这两者之一,就认为都是正确的结果。(www.chuimin.cn)

图7-12给出了这两个事务的几种不同的调度策略。

为了保证并发操作的正确性,数据库管理系统的并发控制机制必须提供一定的手段来保证调度是可串行化的。

从理论上讲,若在某一事务执行过程中禁止执行其他事务,则这种调度策略一定是可串行化的,但这种方法实际上是不可取的,因为这样不能让用户充分共享数据库资源,降低了事务的并发性。目前的数据库管理系统普遍采用封锁方法来实现并发操作的可串行性,从而保证调度的正确性。

两段锁(Two-Phase Locking,简称2PL)协议是保证并发调度的可串行性的封锁协议。除此之外还有一些其他的方法等来保证调度的正确性。我们这里只介绍两段锁协议。

图7—12 并发事务的不同调度