18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 信息时代 > 多版本并发控制(数据库)

多版本并发控制(数据库)

时间:2022-12-18 08:30:01 | 来源:信息时代

时间:2022-12-18 08:30:01 来源:信息时代

    多版本并发控制 : 系统对于每个数据项维护其多个版本(值)的并发控制。当事务访问请求某个数据项的时候,选择一个合适的版本执行,并维护执行调度的可串行性。
版本(version)是指数据对象的一个快照,记录了数据对象某个时刻的状态。多版本并发控制是指在数据库中通过维护数据对象的多个版本信息,来实现高效并发控制的一种策略。随着计算机系统存储设备价格的不断降低,可以考虑为数据库系统的数据对象保留历史的状态。这和现实世界的实际情况是符合的,并不会因为时间的变迁而让历史消失。这给我们提高系统的并发操作程度提供了可能。看下面这个例子: 有一个数据对象A,有两个事务T1和T2,其中T1是读事务,T2是写事务。假定先启动T1事务,后启动T2事务。按照传统的封锁协议,T2事务必须等待事务T1执行结束释放A上的封锁后才能获得对A的封锁。也就是说,T1和T2实际上是串行执行的。但是,如果我们在T2准备写A的时候,不是等待而是为A生成一个新的版本(表示为A′),那么T2就可以继续在A′上执行。只是在T2准备提交的时候要看一下,事务T1是否已经完成。如果T1已经完成了,T2就可以放心地提交。如果T1还没有完成,那么T2必须等待直到T1完成。这样既能保持事务执行的可串行性,又提高了事务执行的并行度。
在多版本机制中,每个write(Q)操作都创建Q的一个新的版本,这样一个数据项就有一个版本序列Q1,Q2,…,Qm与之相关联。每一个版本Qk都像一个独立的数据项一样对待,也就是拥有版本的值、创建Qk的事务的时间戳W-timestamp(Qk)、成功读取Qk的事务的最大时间戳R-timestamp(Qk)。其中,W-timestamp(Q)表示在数据项Q上成功执行write(Q)操作的所有事务中的最大时间戳,R-timestamp(Q)表示在数据项Q上成功执行read(Q)操作的所有事务中的最大时间戳。
用TS(T)表示事务T的时间戳,TS(Ti)〈TS(Tj):表示事务Ti在事务Tj之前开始执行。多版本协议描述如下:
(1)假设版本Qk具有小于或等于TS(T)的最大时间戳。
(2)若事务T发出read(Q),则返回版本Qk的内容。
(3)若事务T发出write(Q),则: 当TS(T)〈Rtimestamp(Qk)时,回滚T;当TS(T)=W-timestamp(Qk)时,覆盖Qk的内容; 否则,创建Q的新版本。
(4) 一个数据项的2个版本Qk和Q1,其W-timestamp都小于系统中最老的事务的时间戳,那么这两个版本中较旧的那个版本将不再被用到,因而可以从系统中删除。
可以进一步改进多版本协议。区分事务的类型为只读事务和更新事务。对于只读事务,发生冲突的可能性很小,可以采用多版本时间戳。对于更新事务,采用较保守的2PL协议。这样的混合协议称为MV2PL。具体做法如下:
除了传统的读锁(共享锁)和写锁(排他锁)外,引进一个新的封锁类型,称为验证锁(certify-lock,或C锁)。封锁的相容矩阵如下:

 R-LockW-LockC-Lock
R-LockYYN
W-LockYNN
C-LockNNN


在这个相容矩阵中,读锁和写锁变得是相容的了。这样,当某个事务写数据项的时候,允许其他事务读数据(当然,写操作将生成一个新的版本,而读操作就是在旧的版本上读)。一旦写事务要提交的时候,必须首先获得在那些加了写锁的数据项上的验证锁。由于验证锁和读锁是不相容的,所以,为了得到验证锁,写事务不得不延迟它的提交,直到所有被它加上写锁的数据项,都被所有那些正在读他们的事务释放。一旦写事务获得验证锁,系统就可以丢弃数据项的旧值,代之于新版本,然后释放验证锁,提交事务。
在这里,系统最多只要维护数据项的两个版本就可以了。多个读操作可以和一个写操作并发地执行。这种情况是传统的2PL所不允许的,提高了读写事务之间的并发度。
目前的很多商用数据库系统,例如Oracle数据库、国产Kingbase ES数据库都是采用MV2PL协议的。

74
73
25
news

版权所有© 亿企邦 1997-2022 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭