并发调度的可串行性

来源:互联网 发布:阿里云网站怎么上线 编辑:程序博客网 时间:2024/05/21 23:00
并发调度的可串行性
什么样的并发操作是正确的?
DBMS对并行事务中个指令的安排执行是随机的,而不同的调度可能会产生不同的结果。
将所有事务串行执行的调度策略一定是正确的调度策略。
以不同的顺序串行执行事务也有可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可认为是正确的。

可串行化调度:
几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并发调度策略称为可串行化的调度。
当多个事务的一次并发执行效果与它们的某一种串行执行效果一样时,称这种并发调度策略为可串行化的调度。

冲突操作是指不同的事务对同一个数据的读写操作和写写操作,其他操作是不冲突操作。
一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序的到另一个调度Sc',如果
Sc'是串行的,称调度Sc为冲突可串行化的调度,一个调度是冲突可串行化,一定是可串行化的调度。

冲突可串行化调度是可串行调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。


保证并发操作调度正确性的方法
封锁方法:两段锁(Two-Phase Locking,简称2PL)协议
并发执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
即:
(1)所有遵守两段锁协议的事务,其并行执行的结果的一定是正确的。
(2)事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。
(3)可串行化的调度中,不一定所有的事务都符合两段锁协议。

两段锁协议与防止死锁的一次锁法的比较:
一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此I一次封锁法遵守两段锁协议:
但是两段所协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。

封锁的粒度
X锁和S锁都是加在某一个数据对象上的
封锁的对象:
逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等
物理单元:页(数据页或索引页)、物理记录等
封锁对象可以很大也可以很小
封锁对象的大小称为封锁的粒度
多粒度封锁
在一个系统中同时支持多种封锁粒度供不同的事务选择
封锁粒度越大,系统被封锁的对象的个数越少,并发度越小,系统开销越小。
选择封锁粒度:
考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡。
如:需要处理多个关系的大量元组:以数据库为封锁单位
需要处理大量元组的用户事务:以关系为封锁单位
只处理少量元组的用户事务:以元组为封锁单位

多粒度封锁协议
允许多粒度树中的每一个节点被独立的加锁
(1)对一个节点加锁意味着这个节点的所有后羿节点也被加以同样类型的锁
(2)在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁
显式封锁:直接加到数据对象上的封锁
隐式封锁:由于其上级节点加锁而是该数据对象加上了锁
显式封锁和隐式封锁的效果是一样的。



1 0
原创粉丝点击