首页 > 代码库 > 数据库 chapter 11 并发控制

数据库 chapter 11 并发控制

第十一章 并发控制

 

介绍并发操作可能造成数据不一致的问题,讲解并发控制的基本概念和最常用的封锁技术。

技术分享

在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行,这种并行执行方式称为同时并发方式。

 

并发控制:为了保证事务的隔离性和一致性。

并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据等。

技术分享

丢失修改:两个事物T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。例如:

技术分享

不可重复读

不可重复读是指事物T1读取数据后,T2执行更新操作,使T 1无法再现前一次读取结果。

技术分享

读“脏”数据

技术分享

并发控制的主要技术有封锁(Locking)、时间戳(Timestamp)和乐观控制法,商用的DBMS一般都采用封锁方法。

封锁:在事务T对某个数据对象,例如表、记录等操作之前,先向系统发出请求,对其加锁,在事务T释放它的锁之前,其他事务不能更新此数据对象。

基本的锁有两种,排它锁(Exclusive Locks,简称X锁)和共享锁(Share Locks,简称S锁)。

技术分享

技术分享

技术分享

技术分享

和操作系统一样,封锁的方法可能引起活锁和死锁等问题。

 

活锁:

如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁后系统首先批准了T3的请求,T2仍等待。然后T4又请求封锁R,T3释放了R上的封锁之后系统又批准了T4的请求,T2可能永远等待,这就是活锁。

技术分享

避免活锁的简单方法是采用先来先服务的策略,当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中的第一个事务得锁。

技术分享

死锁的预防:

一次封锁法:一次封锁发要求每个事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。

顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按照这个顺序实行封锁。

 

死锁的诊断与解除

超时法:如果一个事务的等待时间超过了规定时限,就认为发生了死锁。

等待图法:

技术分享

并发调度的可串行性

技术分享

技术分享

技术分享

冲突可串行化调度

技术分享

技术分享

两段锁协议

目前DBMS普遍采用两段锁(Two-Phase Locking,简称2PL)协议的方法实现并发调度的可穿行性,从而保证调度的正确性。

技术分享

就是封锁时间不可以解锁,解锁时间不可以封锁。

技术分享

技术分享

技术分享

封锁的粒度

封锁对象的大小称为封锁粒度。封锁的对象可以是逻辑单元,也可以是物理单元。

技术分享

技术分享

多粒度封锁

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

 

数据库 chapter 11 并发控制