《并发控制》课件.ppt

上传人:小飞机 文档编号:5031425 上传时间:2023-05-30 格式:PPT 页数:38 大小:288.99KB
返回 下载 相关 举报
《并发控制》课件.ppt_第1页
第1页 / 共38页
《并发控制》课件.ppt_第2页
第2页 / 共38页
《并发控制》课件.ppt_第3页
第3页 / 共38页
《并发控制》课件.ppt_第4页
第4页 / 共38页
《并发控制》课件.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《《并发控制》课件.ppt》由会员分享,可在线阅读,更多相关《《并发控制》课件.ppt(38页珍藏版)》请在三一办公上搜索。

1、第十一章 并发控制,教学目的:理解并发操作的概念,一级并发操作带来的问题 并发控制的主要技术是封锁,理解封锁协议,以及执行封锁协议会带来什么问题,如何解决?理解并发调度,并发调度的正确性。重点难点:三级封锁协议和两段锁协议教学方法:多媒体教学教学课时:4课时,11.1 并发控制,数据库是一个共享资源,可供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。例如:银行数据库系统、机票订票数据库系统等。并发控制的产生是由于共享的要求,即多个用户程序并发存取同一数据。并发控制单位是事务。,在单处理机系统中,事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行。这种并行执行方法称为

2、交叉并发方式(Interleaved Concurrency)。虽然单处理机系统中的并行事务并没有真正的并行运行,但是减少了处理机的空闲时间,提高了系统的效率。在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。这种并行执行方式称为同时并发方式(Simultaneous concurrency)。本章讨论的数据库系统并发控制技术是以单处理机系统为基础的。,当多个用户并发地存取数据库数据时,就可能会产生多个事务同时存取同一数据的情况。若对并发操作不加控制,就可能会导致读和写不正确的数据,破坏数据库的一致性。并发控制的核心问题是在保证数据库一致

3、性的前提下最大限度地提高并发度。,例:考虑飞机订票系统中的一个活动序列:(1)甲售票点读出某航班的机票余额=16;(2)乙售票点读出同一航班的机票余额也为16;(3)甲售票点卖出一张机票,修改余额为15,并把A写回数据库;(4)乙售票点也卖出一张机票,也修改余额为15,并把A写回数据库。,甲:read(A);乙:read(A);甲:A:=A 1;乙:A:=A 1;甲:write(A);乙:write(A);,结果卖出了两张票,数据库中机票余额只减少1。原因是甲乙售票过程是交叉进行的。解决的办法是要把甲乙售票点的操作放在两个事务中,一个执行完了才能执行另一个。,事务如果不加控制地并发执行,会产生

4、下列三个问题:丢失修改(lost update)读脏数据(dirty read)读值不可复现(unrepeatable read),(1)丢失更新:指事务T1与事务T2从数据库中读入同一数据并修改,事务T2的提交结果破坏了事务T1提交的结果,导致事务T1的修改被丢失。,(2)读值不可重现指事务T1读取数据后,事务T2执行了更新操作,某种原因使用户重新查看事务T1,这时事务T1使用的是事务T2修改后的数据,造成了数据的不一致性。,在一事务范围内,两个相同查询将返回不同数据。由于查询注意到其他提交事务的修改而引起的。事务T1读取某数据,事务T2对其做了修改(得到与前一次不同的值)、删除(记录消失)

5、、插入(多了记录)。其中删除和插入的不可重复读称为幻影(Phanton Row)现象。,(3)读“脏”数据指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,事务T1由于某种原因被撤消,这时事务T1已修改过的数据恢复原值,事务T2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。,为什么出现以上三种问题呢?原因是:并发操作破坏了事务的隔离性,即没有对并发事务进行控制,哪个事务申请了就被执行了。,11.2 并行控制的技术封锁,为了避免并发事务引起操作的冲突,DBMS提供了对数据进行封锁的管理机制。封锁是实现并发控制的一个非常重要的技术。封锁:所谓封锁就是事物T在对

6、某个数据对象(表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。1、加锁和解锁加锁(lock):当一个事务访问数据库中的某个数据单元时,要先对被访问的数据单元加锁。解锁(unlock):事务访问结束后释放锁。,2、封锁的类型通常设置的两种基本类型的锁:独占锁(X锁,eXclusive lock,写锁,排它锁):独占型封锁是指如果事务T对数据A实施了X封锁,则只允许T读取和修改A,其他事务不能再对A加任何类型的锁,要等到事务T解除X封锁后,才能获准对A数据进行封锁。共享锁(S锁,Shared lock,

7、读锁):共享型封锁是指如果事务T对数据R加上S封锁,则事务T可以读R但不能修改R,其他事务对数据R的X封锁便不能成功,而对数据R的S封锁请求可以成功。这样其他事务可以读取R但不能修改R,直到事务T释放S封锁。,因此,如果一个数据单元已经有了一个共享锁,只能对它再附加共享锁。假如它有一个独占锁,不能再对它附加任何锁。,图11.3 两种锁的相容矩阵,T1,T2,独占锁 共享锁,独占锁共享锁,NO NONO YES,YES=相容的请求 NO=不相容的请求,X锁和S锁的区别:,3、封锁协议所谓封锁协议(locking protocal)就是描述何时申请、持锁时间、何时释放的封锁规则。对封锁方式规定不同

8、的规则,就形成了各种不同的封锁协议。三级封锁协议是其中最重要的一种,它在不同级别上分别解决了丢失修改、不可重复读和读“脏”数据等不一致问题。不同的封锁协议达到的系统不一致级别是不同的。由高到低是Serializable、Repeatable read、Read commit、Read uncommited。,一级封锁协议:事务在修改数据(读不加锁)之前先对其加X锁,直到事务结束。一级封锁协议可以防止丢失更新。,一级封锁协议不能解决不可重复读和读“脏”数据的问题。不可重复读 读“脏”数据,读数据不加锁,所以成功,二级封锁协议:在一级封锁协议的基础上,在事务读数据之前先对其加S锁,读完后即可释放。

9、二级封锁协议可以防止读“脏”数据。,读的数据时提交之后的数据,二级封锁协议不能解决不可重复读的问题。,三级封锁协议:在一级封锁协议的基础上,在事务读数据之前先对其加S锁,直到事务结束。二级封锁协议可以防止不可重读,总结不同级别的封锁协议:,11.3 活锁和死锁,(1)活锁概念:是指某个事务永远处于等待状态,得不到执行的现象。例:如果事务T1封锁了数据对象R后,事务T2也请求封锁R,于是T2等待。接着T3也请求封锁R。T1释放R上的锁后,系统首先批准了T3的请求,T2只有继续等待。接着T4也请求了封锁R,T3释放R上的锁后,系统又批准了T4的请求,T2有可能就这样永远等待下去。这就是活锁。避免活

10、锁的方法:采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对这些事务排队,该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。,(2)死锁概念:有两个或多个事务同时处于等待状态,每个事务都在等待其中一个事务释放锁才可继续执行,结果任何一个事务都无法执行,这种现象叫做死锁。,例:如果事务T1封锁了数据A,事务T2封锁了数据B。之后T1又申请封锁数据B,因T2已封锁了B,于是T1等待T2释放B上的锁。接着T2又申请封锁数据A,因T1已封锁了A,T2也只能等待T1释放A上的锁,这样就出现了T1等待T2,而T2有等待T1的局面,T1和T2两个事务永远不能

11、结束,形成死锁。,又例:218页图7-11,T1独占资源R1,T2独占资源R2,T3独占资源R3,现在T1等待资源R2,T2等待资源R3,T3等待资源R1,R2,形成了事务间的循环等待关系,每个事务都无法继续执行,系统进入死锁状态。,死锁的预防:保证系统永远不进入死锁状态。预防死锁的方法较多,如:一次封锁法:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。但这样做,扩大封锁范围,降低了并发度。顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实现封锁。,死锁的诊断超时法:如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。等待图法:

12、事务等待图是一个有向图G=(T,U),T为结点的集合,每个结点表示正运行的事务;U为边的集合,每条边表示事务等待的情况。若 T1等待 T2,则T1,T2之间有一条有向边,从 T1 指向 T2。如果发现图中存在回路,则表示系统中出现了死锁。如图11.6。,死锁的解除 发现死锁后,靠事务本身无法打破死锁,必须由DBMS干预。DBMS对死锁一般作下列处理:选择一个处理死锁代价最小的事务,将其撤销,释放其持有锁,其他事务继续。对撤销的事务所执行的数据修改必须加以恢复。被撤销的事务在另一时间再次启动。,11.4 并发操作的调度,DBMS对并发事务不同的调度可能会产生不同的结果,那么什么样的调度才是正确的

13、呢?一个事务在运行过程中没有其他事务在同时运行(即不受其它事务干扰),该结果是正确的。将所有事务串行起来的调度策略一定是正确的。不同的串行调度会有不同的结果,但不会改变数据库的一致性,可接受。若要n个事务并行执行是正确的,当且仅当其结果与按某一次串行地执行它们时的结果相同。这一并行调度策略称为可串行化(serializable)的调度。可串行化是并行事务正确性的唯一准则。,1、不同的调度顺序,结果不同 假设初始值A=B=2,A=3B=4,B=3A=4,2、并行调度,A=3B=3,A=3B=4,事务T1T2,不可串行化调度 可串行化调度,结论:串行调度是一致性调度,而非串行化调度有可能产生不一致

14、。因此,希望能够找到那些等价于串行调度的并发调度,以保证调度的一致性。同一事务组的几个可串行调度,其结果未必相同。与串行调度等价的调度,称之为可串行化调度。,保证并行调度可串行性的封锁协议两段式锁协议两段锁协议:是指所有事务必须分两个阶段对数据项加锁和解锁。在对任何数据进行读写操作之前,首先要申请并获得对该数据的封锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁。,11.5 两段锁协议,所谓”两段”锁的含义是,事务分为两个阶段:第一阶段是获得封锁(扩展阶段)。这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁(收缩阶段)。在这个阶段,事务可以释放

15、任何数据项上的任何类型的锁,但是不能再申请任何锁。,例:事务T1遵守两段锁协议,其封锁序列如下图:,又例:事务T2不遵守两段锁协议,其封锁序列是:slock Aunlock A slock B unlock Bslock Cunlock C,可以证明,若并发控制的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。但需要说明的是:事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。如下张幻灯片,不遵守两段锁协议,遵守两段锁协议,注意:两段锁协议和防止死锁的一次封锁法的异同之处。一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁

16、法遵守两段锁协议;但两段锁协议并不是要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务有可能发生死锁。例:p302 图11.9,课堂练习:此并发操作出现什么问题?应如何修改?,该操作丢失修改。该操作的第步中,事务T1应该申请X锁。,11.6 封锁的粒度封锁的对象:属性、元组、关系、索引、数据库、物理页、数据块。封锁粒度越大,并发度越小,系统开销越小。从用户的角度看,如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁(Multiple Granularity Locking)。一般情况下,需要处理大量元组的事务可以用关系作为封锁粒度;需

17、要处理多个关系的大量元组的事务可以以数据库作为封锁粒度;一个处理少量元组的事务通常用元组作为封锁粒度。,SQL Server里的锁定动作是自动的,它由一个内部的锁管理器进程实现。锁管理器负责决定锁类型(共享锁,独占锁等)和锁粒度(行,页和表等)。例如,create index语句会锁定整个表,而update语句会锁定一行或多行或整个表。,行锁(row-level lock):是指锁定一个数据页或索引页中的一行数据。页锁(page lock):用于锁定一个页(8KB的数据页或索引页信息)。表锁(table lock):用于锁定包含数据与索引的整个表。用于表级别的锁定。一个表通常包含多个页。,1、

18、SQL Server提供不同级别的物理锁,注意:SQL Server在可能情况下尽量使用页锁,而不使用表锁,以减少阻塞。,2、SQL Server锁类型,锁管理器根据事务类型(如select,insert,delete等)来选择锁的类型。锁管理器使用的各种类型的锁如下:共享锁(shared):用于读事务(如select语句),可以对行、页和表使用共享锁,允许其他事务读。完成后即释放;更新锁(update):用于更新操作(如Update、Delete语句),可以对行、页和表使用更新锁。更新锁是先使用共享锁读数据,而后实际修改时升级为独占锁。更新锁同时只能有一个事务拥有。,独占锁(execusiv

19、e):用于写事务(如Insert、Update、Delete语句),实际修改时使用;意向锁(intent):说明其下级结点正在被加锁。模式锁(schema):分为模式静态锁和模式修改锁。当SQL Server禁止修改模式时,使用模式静态锁;实际修改表或索引时,使用模式修改锁。,本章小结,1、数据库的重要特征是它能为多个用户提供数据共享。数据库管理系统必须提供并发控制机制来协调并发用户的并发操作。2、并发操作带来的数据不一致性:丢失更新、不可重复读、读“脏”数据3、解决 这三类问题的主要技术是封锁。封锁的类型和三级协议。封锁之后会带来哪些新的问题呢?死锁和活锁。4、并发控制机制调度并发事务操作是否正确的判别准则是可串行性,两段锁协议是可串行化调度的充分条件,但不是必要条件。5、封锁的粒度。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号