八分布式并发控制10.pptx
文本预览下载声明
第八章? 分布式并发控制; 并发控制问题
并发控制是分布式事务管理的基本任务之一,
目的是保证分布式数据库系统中的多个事务的高效并发执行。多个事务并发执行,就有可能产生操作冲突,如:出现重复读错误或读取了脏数据等,造成数据库数据的不一致。
并发控制确保事务满足一致性和有效性。;(1)丢失修改错误
初始x=100,若并行执行,执行结果为:T1:x=70;T2:x =70,最终结果x=70;结果导致T2的执行结果破坏了T1执行的结果,该种现象也称丢失修改错误。;(2)重复读错误
例8.1.2有两个并发执行的事务T1和T2,其中x是数据库中的一个属性,T1和T2操作序列如下所示:;(3)读脏数据错误
例8.1.3 有两个并发执行的事务T1和T2,其中x是数据库中的一个属性, T1和T2操作序列如下所示: ;?并发控制定义
并发控制就是利用正确的方式调度并发操作,避免造成数据的不一致性,防止一个事务的执行受到其它事务的干扰,保证事务并发执行的可串行性。 ; 锁的类型
锁一般分两种类型,排它锁(exclusive)和共享锁(shared)。
排它锁常称为X锁或写锁;
排它锁指当事务T对数据A施加排它锁之后,只允许事务T自己读写A,其它事务都不可读写A。
共享锁称为S锁或读锁。
共享锁指当事务T对数据A施加共享锁之后,事务T和其它事务只能读取A。即共享锁允许多个事务同时访问同一数据项A。; 封锁规则
事务在执行过程中需对其访问的数据项进行加锁,访问结束要及时释放其对数据项加的锁,以便供其它事务访问,保证多个事务高度正确并行执行。具体封锁规则为:
(1) 事务T在对数据项A进行读/写操作之前,必须对数据项A施加读/写锁,访问后立即释放已申请的锁;
(2)如果事务T申请不到希望的锁,事务T需等待,直到申请到所需要的锁,之后方可继续执行 ; 锁的兼容性
锁一般分读锁和写锁。读锁是进行读操作时加的锁,允许多个事务同时完成读操作,即具有共享性;写锁是进行写操作时加的锁,只允许申请该锁的事务进行写操作,所以,写锁不具有共享性,而具有排它性。写锁和读锁的相容性见下表:; 锁的粒度
封锁数据对象的单位称锁的粒度,即指被封锁的数据对象的大小。锁的粒度也称锁的大小。系统根据自己的实际情况确定锁的粒度,锁的粒度可以是关系的字段属性、关系的元组、关系(也称文件)或整个数据库等。
锁粒度的大小对系统的并发度和开销有一定影响,锁粒度越大,系统的开销越小,但降低了系统的并发度。针对并发控制,系统的并发度与锁粒度成反比。如下表所示:;两段封锁协议(2PL)是数据库系统中解决并发控制的重要算法之一。遵循两段锁协议规则的系统可保证事务的可串行性调度。
两段封锁协议的实现思想是将事务中的加锁操作和解锁操作分两阶段完成,并要求并发执行的多个事务要在对数据操作之前进行加锁,且每个事务中的所有加锁操作要在解锁操作以前完成。;通常两段封锁协议分为基本的两段封锁协议和严格的两段封锁协议。
在两段封锁协议实现中,系统的加锁方式分两种:
显示锁方式,由系统加封锁命令实现;
隐式锁方式,由系统自动加锁实现。 ; 基本的两段封锁协议
基本的两段封锁协议的内容分两阶段,加锁阶段和解锁阶段。具体规则描述如下:
阶段1:加锁阶段
?事务在读写一个数据项之前,必须对其加锁;
?如果该数据项被其它使用者已加上不相容的锁,则必须等待。
阶段2:解锁阶段
?事务在释放锁之后,不允许再申请其它锁;
;在事务执行过程中,两段封锁协议(2PL)的加锁、解锁示意图(图8.1)如下: ;(1) 避免丢失修改错误
下图描述了事务T1和T2并行执行时产生了丢失修改错误。若采用两段封锁协议进行并行控制: ;?(2) 避免重复读错误
下图描述了事务T1和T2并行执行时产生了重复读错误。若采用两段封锁协议进行并行控制:;§8.3 两段封锁协议(2PL); 严格的两段封锁协议(2PL)
严格的两段封锁协议与基本的两段封锁协议内容基本上是一致的,只是解锁时刻不同。严格的两段封锁协议(2PL)是在事务结束时才启动解锁,保证了事务所更新数据的耐久性。
采用两段封锁协议(2PL)的事务执行过程为:begin_transaction→加锁→操作→提交/废弃(commit/abort)→解锁。;提交/废弃(commit/abort)时解锁过程具体如下:
(1)?? 对commit的处理
?释放读锁;
?写日志;
?释放写锁。
(2)? 对abort的处理
?释放读锁;
?(反做)undo;
?释放写锁;;§8.3 两段封锁协议(2PL); 事务执行过程的形式化描述
并发控制的主要目的是保证分布事务及分布式数据库的一致性。并发控制既要实现分布事务的可串行性,又要保持事务具有良好的并发度。无论集中式数据库,还是分布式数据库的并发控制均
显示全部