《数据库并发控制.pptx》由会员分享,可在线阅读,更多相关《数据库并发控制.pptx(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/251多事务的执行串行执行串行执行交叉并发执行交叉并发执行同时并发执行同时并发执行 每个时刻只有一个事务运行,其他事务必须等到每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的不能充分利用系统资源,发挥数据库共享资源的特点特点第1页/共80页2023/3/252多事务的执行串行执行串行执行交叉并发执行交叉并发执行同时并发执行同时并发执行 一些并行事务的并行操作轮流交叉运行一些并行事务的并行操作轮流交叉运行 单处理机系统中的并发方式,能够减少处理机的单处理机系统中的并发方式,能够减少处理机的空闲时间
2、,提高系统的效率空闲时间,提高系统的效率第2页/共80页2023/3/253多事务的执行串行执行串行执行交叉并发执行交叉并发执行同时并发执行同时并发执行 多处理机系统,每个处理机可以运行一个事务,多处理机系统,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个多个处理机可以同时运行多个事务,实现多个事务真正的并行运行事务真正的并行运行 最理想的并发方式,但受制于硬件环境最理想的并发方式,但受制于硬件环境 更复杂的并发方式机制更复杂的并发方式机制第3页/共80页2023/3/254事务并发执行带来的问题可能会读取和存储不正确的数据,破坏事务的隔离性可能会读取和存储不正确的数据,
3、破坏事务的隔离性和数据库的一致性和数据库的一致性DBMSDBMS必须提供并发控制机制必须提供并发控制机制并发控制机制是衡量一个并发控制机制是衡量一个DBMSDBMS性能的重要标志之一性能的重要标志之一第4页/共80页2023/3/255第十一章 并发控制 11.111.1 并发控制概述并发控制概述 11.211.2 封锁封锁 11.311.3活锁和死锁活锁和死锁 11.411.4数据并发调度的可串行性数据并发调度的可串行性 11.511.5两段锁协议两段锁协议 11.611.6封锁粒度封锁粒度 11.711.7小结小结第5页/共80页2023/3/25611.1 并发控制概述并发控制机制的任务
4、并发控制机制的任务 对并发操作进行正确调度对并发操作进行正确调度 保证事务的隔离性保证事务的隔离性 保证数据库的一致性保证数据库的一致性第6页/共80页2023/3/257并发控制概述数据不一致实例:飞机订票系统数据不一致实例:飞机订票系统 读读A=16A=16 A AA-1A-1写回写回A=15A=15 读读A=16A=16 AAA-1A-1写回写回A=15A=15 事务事务 T T2 2事务事务 T T1 1T T1 1的修改被的修改被T T2 2覆盖了!覆盖了!第7页/共80页2023/3/258并发控制概述并发操作带来的数据不一致性并发操作带来的数据不一致性11、丢失修改丢失修改(lo
5、stupdatelostupdate)22、不可重复读不可重复读(non-repeatablereadnon-repeatableread)33、读读“脏脏”数据数据(dirtyreaddirtyread)第8页/共80页2023/3/259并发控制概述并发操作带来的数据不一致性并发操作带来的数据不一致性11、丢失修改丢失修改(lostupdatelostupdate)22、不可重复读不可重复读(non-repeatablereadnon-repeatableread)33、读读“脏脏”数据数据(dirtyreaddirtyread)指事务指事务1 1与事务与事务2 2从数据库中读入同一数据并
6、修改,从数据库中读入同一数据并修改,事务事务2 2的提交结果破坏了事务的提交结果破坏了事务1 1提交的结果,导致事务提交的结果,导致事务1 1的修改被丢失。的修改被丢失。读读A=16A=16 A AA-1A-1写回写回A=15A=15 读读A=16A=16 AAA-1A-1写回写回A=15A=15 事务事务 T T2 2事务事务 T T1 1第9页/共80页2023/3/2510并发控制概述并发操作带来的数据不一致性并发操作带来的数据不一致性11、丢失修改丢失修改(lostupdatelostupdate)22、不可重复读不可重复读(non-repeatablereadnon-repeatab
7、leread)33、读读“脏脏”数据数据(dirtyreaddirtyread)指事务指事务1 1读取数据后,事务读取数据后,事务2 2执行更新操作,使执行更新操作,使事务事务1 1无法再现前一次读取结果。无法再现前一次读取结果。读读B=100B=100B BB*2B*2写回写回B=200B=200 读读A=50A=50读读B=100B=100求和求和=150=150 读读A=50A=50读读B=200B=200求和求和=250=250(验算不对验算不对)事务事务 T T2 2事务事务 T T1 1第10页/共80页2023/3/2511指事务指事务1 1修改某一数据,并将其写回磁盘,事务修改
8、某一数据,并将其写回磁盘,事务2 2读取同一数据后,事务读取同一数据后,事务1 1由于某种原因被撤消,这时由于某种原因被撤消,这时事务事务1 1已修改过的数据恢复原值,事务已修改过的数据恢复原值,事务2 2读到的数据读到的数据就与数据库中的数据不一致,是不正确的数据,又就与数据库中的数据不一致,是不正确的数据,又称为称为“脏脏”数据。数据。并发控制概述并发操作带来的数据不一致性并发操作带来的数据不一致性11、丢失修改丢失修改(lostupdatelostupdate)22、不可重复读不可重复读(non-repeatablereadnon-repeatableread)33、读读“脏脏”数据数据
9、(dirtyreaddirtyread)读读C=200C=200 读读C=100C=100CCC*2C*2写回写回C C ROLLBACKROLLBACKCC恢复为恢复为100100事务事务 T T2 2事务事务 T T1 1第11页/共80页2023/3/2512三类不可重复读事务事务1 1读取某一数据后:读取某一数据后:1 1)事务事务2 2对其做了修改对其做了修改,当事务,当事务1 1再次读该数据时,得到再次读该数据时,得到与前一次不同的值。与前一次不同的值。2 2)事务事务2 2删除了其中部分记录删除了其中部分记录,当事务,当事务1 1再次读取数据时,再次读取数据时,发现某些记录神密地
10、消失了。发现某些记录神密地消失了。3 3)事务事务2 2插入了一些记录插入了一些记录,当事务,当事务1 1再次按相同条件读取再次按相同条件读取数据时,发现多了一些记录。数据时,发现多了一些记录。后两种不可重复读有时也称为后两种不可重复读有时也称为幻影幻影现象(现象(phantomrowphantomrow)第12页/共80页2023/3/251311.2 封锁一、什么是封锁一、什么是封锁二、基本封锁类型二、基本封锁类型三、基本锁的相容矩阵三、基本锁的相容矩阵第13页/共80页2023/3/2514一、什么是封锁封锁就是事务封锁就是事务T T在对某个数据对象(例如表、记录等)在对某个数据对象(例
11、如表、记录等)操作之前,先向系统发出请求,对其加锁操作之前,先向系统发出请求,对其加锁加锁后事务加锁后事务T T就对该数据对象有了一定的控制,在事务就对该数据对象有了一定的控制,在事务TT释放它的锁之前,其它的事务不能更新此数据对象释放它的锁之前,其它的事务不能更新此数据对象封锁是实现并发控制的一个非常重要的技术封锁是实现并发控制的一个非常重要的技术第14页/共80页2023/3/2515二、基本封锁类型DBMSDBMS通常提供了多种类型的封锁。一个事务对某个通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定
12、的类型决定的基本封锁类型基本封锁类型 排它锁(排它锁(ExclusivelockExclusivelock,简记为简记为X X锁)锁)共享锁(共享锁(SharelockSharelock,简记为简记为S S锁)锁)第15页/共80页2023/3/2516二、基本封锁类型DBMSDBMS通常提供了多种类型的封锁。一个事务对某个通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的类型决定的 共享锁(共享锁(SharelockSharelock,简记为简记为S S锁)锁)排它锁又称为写锁排它锁又称为写锁若事务若事务
13、T T对数据对象对数据对象A A加上加上X X锁,则只允许锁,则只允许T T读取读取和修改和修改A A,其它任何事务不能再对其它任何事务不能再对A A加任何类型加任何类型的锁,直到的锁,直到T T释放释放A A上的锁上的锁基本封锁类型基本封锁类型 排它锁(排它锁(ExclusivelockExclusivelock,简记为简记为X X锁)锁)第16页/共80页2023/3/2517共享锁又称为读锁共享锁又称为读锁若事务若事务T T对数据对象对数据对象A A加加S S锁,则锁,则事务事务T T可以读取可以读取A A但不能修改但不能修改A A,其它事务只能再对其它事务只能再对A A加加S S锁,而
14、不锁,而不能加能加X X锁,直到锁,直到T T释放释放A A上的上的S S锁锁二、基本封锁类型DBMSDBMS通常提供了多种类型的封锁。一个事务对某个通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的类型决定的 共享锁(共享锁(SharelockSharelock,简记为简记为S S锁)锁)基本封锁类型基本封锁类型 排它锁(排它锁(ExclusivelockExclusivelock,简记为简记为X X锁)锁)第17页/共80页2023/3/2518三、基本锁的相容矩阵Y=YesY=Yes,相容的请求相容的
15、请求N=NoN=No,不相容的请求不相容的请求T1T2XS-XNNYSNYY-YYY第18页/共80页2023/3/2519在运用在运用X X锁和锁和S S锁对数据对象加锁时,需要约定一些锁对数据对象加锁时,需要约定一些规则:封锁协议(规则:封锁协议(LockingProtocolLockingProtocol)何时申请何时申请X X锁或锁或S S锁锁 持锁时间、何时释放持锁时间、何时释放不同的封锁协议,在不同的程度上为并发操不同的封锁协议,在不同的程度上为并发操作的正确作的正确调度提供一定的保证调度提供一定的保证常用的封锁协议:三级封锁协议常用的封锁协议:三级封锁协议四、封锁协议第19页/共
16、80页2023/3/2520四、封锁协议事务事务T T在在修改修改数据数据R R之前必须先对其加之前必须先对其加X X锁,直到锁,直到事务事务结束才释放结束才释放一级封锁协议可防止丢失修改一级封锁协议可防止丢失修改 正常结束(正常结束(COMMITCOMMIT)非正常结束(非正常结束(ROLLBACKROLLBACK)在一级封锁协议中,如果是读数据,不需要加锁的,在一级封锁协议中,如果是读数据,不需要加锁的,所以它不能保证可重复读和不读所以它不能保证可重复读和不读“脏脏”数据。数据。1 1、一级封锁协议、一级封锁协议第20页/共80页2023/3/2521四、封锁协议 Xlock AXlock
17、 A等待等待等待等待等待等待等待等待获得获得Xlock AXlock A读读A=15A=15AA-1AA-1写回写回A=14A=14CommitCommitUnlock AUnlock A Xlock AXlock A 获得获得 读读A=16A=16 AA-1 AA-1 写回写回A=15A=15 Commit Commit Unlock A Unlock A T T2 2T T1 1没有丢失修改没有丢失修改1 1、一级封锁协议、一级封锁协议第21页/共80页2023/3/2522四、封锁协议 读读A=15A=15 XlockAXlockA获得获得 读读A=16A=16AA-1AA-1写回写回A
18、=15A=15 RollbackRollbackUnlockAUnlockAT T2 2T T1 1读读“脏脏”数据数据1 1、一级封锁协议、一级封锁协议第22页/共80页2023/3/2523四、封锁协议XlockBXlockB获得获得读读B=100B=100BB*2BB*2写回写回B=200B=200CommitCommitUnlockBUnlockB读读A=50A=50读读B=100B=100求和求和=150=150读读A=50A=50读读B=200B=200求和求和=250=250(验算不对验算不对)T T2 2T T1 1不可重复读不可重复读1 1、一级封锁协议、一级封锁协议第23页
19、/共80页2023/3/2524四、封锁协议一级封锁协议一级封锁协议+事务事务T T在在读取读取数据数据R R前必须先加前必须先加S S锁,锁,读完后即可释放读完后即可释放S S锁锁二级封锁协议可以防止丢失修改和读二级封锁协议可以防止丢失修改和读“脏脏”数据数据在在二二级封锁协议中,由于读完数据后即可释放级封锁协议中,由于读完数据后即可释放S S锁,锁,所以它不能保证可重复读。所以它不能保证可重复读。2 2、二级封锁协议、二级封锁协议第24页/共80页2023/3/2525四、封锁协议 Sclock Sclock A A 获得获得 读读A=50A=50 Unlock A Unlock AScl
20、ock BSclock B 获得获得 读读B=100B=100 Unlock B Unlock B求和求和=150=150 Xlock BXlock B等待等待等待等待获得获得Xlock BXlock B读读B=100B=100BB*2BB*2写回写回B=200B=200CommitCommitUnlock BUnlock BT T2 2T T1 1Sclock ASclock A 获得获得 读读A=50A=50 Unlock A Unlock A Sclock B Sclock B 获得获得 读读B=200B=200 Unlock B Unlock B 求和求和=250=250(验算不对验算
21、不对)T T2 2T T1 1(续续)不可重复读不可重复读2 2、二级封锁协议、二级封锁协议第25页/共80页2023/3/2526四、封锁协议一级封锁协议一级封锁协议+事务事务T T在在读取读取数据数据R R之前必须先对其之前必须先对其加加S S锁,直到锁,直到事务结束才释放事务结束才释放三级封锁协议可防止丢失修改、读脏数据和不可重复读三级封锁协议可防止丢失修改、读脏数据和不可重复读3 3、三级封锁协议、三级封锁协议第26页/共80页2023/3/2527四、封锁协议 Xlock BXlock B等待等待等待等待等待等待 等待等待等待等待等待等待获得获得Xlock BXlock B读读B=1
22、00B=100BB*2BB*2写回写回B=200B=200CommitCommitUnlock B Unlock B Slock ASlock A 读读A=50A=50 Slock B Slock B 读读B=100B=100 求和求和=150=150 读读A=50A=50 读读B=100B=100 求和求和=150=150 Commit Commit Unlock A Unlock A Unlock B Unlock B T T2 2T T1 1可重复读可重复读3 3、三级封锁协议、三级封锁协议第27页/共80页2023/3/2528四、封锁协议 Slock CSlock C等待等待等待等待
23、等待等待 获得获得Slock CSlock C读读C=100C=100Commit CCommit CUnlock CUnlock C Xlock CXlock C 读读C=100C=100 CC*2 CC*2 写回写回C=200C=200 ROLLBACKROLLBACK (C (C恢复为恢复为100)100)Unlock C Unlock CT T2 2T T1 1不读不读“脏脏”数据数据3 3、三级封锁协议、三级封锁协议第28页/共80页2023/3/2529四、封锁协议三级协议的主要区别三级协议的主要区别 什么操作需要申请封锁什么操作需要申请封锁 何时释放锁(即持锁时间)何时释放锁(即
24、持锁时间)第29页/共80页2023/3/253011.3 活锁和死锁 活活锁锁 死死锁锁封锁技术可以有效地解决并行操作的一致性问题,封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题但也带来一些新的问题第30页/共80页2023/3/2531活锁第31页/共80页2023/3/2532活锁如何避免活锁如何避免活锁采用先来先服务的策略:采用先来先服务的策略:当多个事务请求封锁同一数据对象时当多个事务请求封锁同一数据对象时 按请求封锁的先后次序对这些事务排队按请求封锁的先后次序对这些事务排队 该数据对象上的锁一旦释放,首先批准申请队列中该数据对象上的锁一旦释放,首先批准申请队列中第
25、一个事务获得锁。第一个事务获得锁。第32页/共80页2023/3/2533死锁XlockXlock R R1 1.XlockRXlockR2 2等待等待等待等待等待等待.XlockRXlockR2 2.XlockRXlockR1 1等待等待等待等待.T1T2T1T2第33页/共80页2023/3/2534死锁解决死锁的方法解决死锁的方法 预防死锁预防死锁 死锁的诊断与解除死锁的诊断与解除第34页/共80页2023/3/25351、死锁的预防产生死锁的原因是两个或多个事务都已封锁了一些数据产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已经被其他事务封锁的数据对象对象,然后又
26、都请求对已经被其他事务封锁的数据对象加锁,从而出现死等待。加锁,从而出现死等待。预防死锁的发生就是要破坏产生死锁的条件预防死锁的发生就是要破坏产生死锁的条件预防死锁的方法预防死锁的方法 一次封锁法一次封锁法 顺序封锁法顺序封锁法第35页/共80页2023/3/2536 解决方法:将事务在执行过程中可能要封锁的解决方法:将事务在执行过程中可能要封锁的数据对象全部加锁,进一步降低了并发度数据对象全部加锁,进一步降低了并发度1、死锁的预防(1)(1)一次封锁法一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行
27、一次封锁法存在的问题:一次封锁法存在的问题:扩大了封锁的范围,降低了并发度扩大了封锁的范围,降低了并发度 难于事先精确确定封锁对象难于事先精确确定封锁对象 数据库中数据是不断变化的,原来不要求封锁数据库中数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象的数据,在执行过程中可能会变成封锁对象第36页/共80页2023/3/25371、死锁的预防(2)(2)顺序封锁法顺序封锁法顺序封锁法是预先对数据对象规定一个封锁顺序,顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁所有事务都按这个顺序实行封锁顺序封锁法存在的问题顺序封锁法存在的问题 维护成本高维护成
28、本高 难于实现难于实现数据库系统中可封锁的数据对象极其众多,并且随数数据库系统中可封锁的数据对象极其众多,并且随数据的插入、删除等操作而不断地变化,要维护这极多据的插入、删除等操作而不断地变化,要维护这极多且变化的资源的封锁顺序非常困难,成本很高且变化的资源的封锁顺序非常困难,成本很高事务的封锁请求可以随着事务的执行而动态地决定,事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁很难按规定的顺序去施加封锁例:规定数据对象的封锁顺序为例:规定数据对象的封锁顺序为A,B,C,D,EA,
29、B,C,D,E。事务。事务T3T3起初要求封锁数据对象起初要求封锁数据对象B,C,EB,C,E,但当它封锁了,但当它封锁了B,CB,C后,发现还需要封锁后,发现还需要封锁A A,这样就破坏了封锁顺序,这样就破坏了封锁顺序第37页/共80页2023/3/25381、死锁的预防结论结论 DBMSDBMS在解决死锁的问题上更普遍采用的是诊断并在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法解除死锁的方法 在操作系统中广为采用的预防死锁的策略并不很适在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点合数据库的特点第38页/共80页2023/3/25392、死锁的诊断与解除允许死锁发生允许死
30、锁发生 由由DBMSDBMS的并发控制子系统定期检测系统中是否的并发控制子系统定期检测系统中是否存在死锁存在死锁解除死锁解除死锁 一旦检测到死锁,就要设法解除一旦检测到死锁,就要设法解除 超时法超时法检测死锁检测死锁 等待图法等待图法第39页/共80页2023/3/25402、死锁的诊断与解除检测死锁:超时法检测死锁:超时法 如果一个事务的等待时间超过了规定的时限,就如果一个事务的等待时间超过了规定的时限,就认为发生了死锁认为发生了死锁 优点:实现简单优点:实现简单 缺点:缺点:有可能误判死锁有可能误判死锁 时限若设置得太长,死锁发生后不能及时发现时限若设置得太长,死锁发生后不能及时发现第40
31、页/共80页2023/3/2541 并发控制子系统周期性地(比如每隔并发控制子系统周期性地(比如每隔1min1min)检测)检测事务等待图,如果发现图中存在回路,则表示系统事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。中出现了死锁。2、死锁的诊断与解除检测死锁:等待图法检测死锁:等待图法 用事务等待图动态反映所有事务的等待情况用事务等待图动态反映所有事务的等待情况 事务等待图是一个有向图事务等待图是一个有向图G=(TG=(T,U)U)T T为结点的集合,每个结点表示正运行的事务为结点的集合,每个结点表示正运行的事务 U U为边的集合,每条边表示事务等待的情况为边的集合,每条边表示事
32、务等待的情况 若若T T1 1等待等待T T2 2,则,则T T1 1,T T2 2之间划一条有向边,之间划一条有向边,从从T T1 1指向指向T T2 2第41页/共80页2023/3/25422、死锁的诊断与解除解除死锁的方法:解除死锁的方法:选择一个处理死锁代价最小的事务,将其撤消,释放选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。此事务持有的所有的锁,使其它事务能继续运行下去。第42页/共80页2023/3/254311.4 并发调度的可串行性一、什么样的并发操作调度是正确的一、什么样的并发操作调度是正确的二、如何保证并发操作的调度是正确
33、的二、如何保证并发操作的调度是正确的第43页/共80页2023/3/2544一、什么样的并发操作调度是正确的计算机系统对并行事务中并行操作的调度是随机的,计算机系统对并行事务中并行操作的调度是随机的,而不同的调度可能会产生不同的结果。而不同的调度可能会产生不同的结果。将所有事务串行起来的调度策略一定是正确的调度策略将所有事务串行起来的调度策略一定是正确的调度策略 如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其他事务的干扰,那么就可以他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的认为该事务的运行
34、结果是正常的或者预想的第44页/共80页2023/3/2545一、什么样的并发操作调度是正确的以不同的顺序串行执行事务也可能会产生不同的结果,以不同的顺序串行执行事务也可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可以认为但由于不会将数据库置于不一致状态,所以都可以认为是正确的是正确的几个事务的并行执行是正确的,几个事务的并行执行是正确的,当且仅当其结果与按当且仅当其结果与按某一次序串行地执行它们时的结果相同某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化这种并行调度策略称为可串行化(SerializableSerializable)的调度的调度可串行性是并行事
35、务正确性的唯一准则可串行性是并行事务正确性的唯一准则第45页/共80页2023/3/2546一、什么样的并发操作调度是正确的例:现在有两个事务,分别包含下列操作:例:现在有两个事务,分别包含下列操作:事务事务1 1:读:读B B;A=B+1A=B+1;写回;写回A A;事务事务2 2:读:读A A;B=A+1B=A+1;写回;写回B B;假设假设A A的初值为的初值为2 2,B B的初值为的初值为2 2。对这两个事务的不同调度策略对这两个事务的不同调度策略 串行执行串行执行 交错执行交错执行第46页/共80页2023/3/2547一、什么样的并发操作调度是正确的Slock BSlock BY=
36、B=2Y=B=2Unlock BUnlock BXlock AXlock AA=Y+1A=Y+1写回写回A(=3)A(=3)Unlock AUnlock ASlock ASlock AX=A=3X=A=3Unlock AUnlock AXlock BXlock BB=X+1B=X+1写回写回B(=4)B(=4)Unlock BUnlock BT1T2串行调度策略串行调度策略1 1正确的调度正确的调度第47页/共80页2023/3/2548一、什么样的并发操作调度是正确的Slock BY=B=3Unlock BXlock AA=Y+1写回A(=4)Unlock A SlockA X=A=2Unl
37、ock AXlock BB=X+1写回B(=3)Unlock BT1T2串行调度策略串行调度策略2 2正确的调度正确的调度第48页/共80页2023/3/2549一、什么样的并发操作调度是正确的T1T2Slock BY=B=2Unlock BXlock AA=Y+1写回A(=3)Unlock A Slock AX=A=2Unlock AXlock BB=X+1写回B(=3)Unlock B 不可串行化的调度不可串行化的调度由于其执行结果与由于其执行结果与串行调度策略串行调度策略1 1、2 2的结果都不同,所以是错误的调度。的结果都不同,所以是错误的调度。第49页/共80页2023/3/2550
38、一、什么样的并发操作调度是正确的T1T2Slock BY=B=2Unlock BXlock AA=Y+1写回A(=3)Unlock A Slock A 等待 等待 等待X=A=3Unlock AXlock BB=X+1写回B(=4)Unlock B可串行化的调度可串行化的调度由于其执行结果与由于其执行结果与串行调度策略串行调度策略1 1的的执行结果都相同,所以是正确的调度。执行结果都相同,所以是正确的调度。第50页/共80页2023/3/2551二、如何保证并发操作的调度是正确的为了保证并行操作的正确性,为了保证并行操作的正确性,DBMSDBMS的并行控制机制的并行控制机制必须提供一定的手段来
39、保证调度是可串行化的。必须提供一定的手段来保证调度是可串行化的。从理论上讲,在某一事务执行时禁止其他事务执行的从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可行的,因为它使用户策略,但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资源。不能充分共享数据库资源。第51页/共80页2023/3/2552二、如何保证并发操作的调度是正确的保证并发操作调度正确性的方法保证并发操作调度正确性的方法 封锁方法:两段锁协议封锁方法:两段锁协议(Two-PhaseLockingT
40、wo-PhaseLocking,简称,简称2PL2PL)时标方法时标方法 乐观方法乐观方法第52页/共80页2023/3/2553 第二阶段是释放封锁,也称为收缩阶段第二阶段是释放封锁,也称为收缩阶段11.5 两段锁协议两段锁协议的内容两段锁协议的内容 在对任何数据进行读、写操作之前,事务首先要在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁获得对该数据的封锁 在释放一个封锁之后,事务不再获得任何其他封锁在释放一个封锁之后,事务不再获得任何其他封锁“两段两段”锁的含义锁的含义 事务分为两个阶段事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段第一阶段是获得封锁,也称为扩展阶段第5
41、3页/共80页2023/3/2554两段锁协议例:例:事务事务1 1的封锁序列:的封锁序列:SlockA.SlockB.XlockC.UnlockB.SlockA.SlockB.XlockC.UnlockB.UnlockA.UnlockCUnlockA.UnlockC;事务事务2 2的封锁序列:的封锁序列:SlockA.UnlockA.SlockB.XlockC.SlockA.UnlockA.SlockB.XlockC.UnlockC.UnlockBUnlockC.UnlockB;事务事务1 1遵守两段锁协议,而事务遵守两段锁协议,而事务2 2不遵守两段协议。不遵守两段协议。第54页/共80页
42、2023/3/2555两段锁协议并发执行的所有事务均遵守两段锁协议,则对这些事务并发执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。的所有并行调度策略都是可串行化的。所有遵守两段锁协议的事务,其并发执行的结果一定所有遵守两段锁协议的事务,其并发执行的结果一定是正确的是正确的事务遵守两段锁协议是可串行化调度的充分条件,事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。而不是必要条件。可串行化的调度中,不一定所有事务都必须符合可串行化的调度中,不一定所有事务都必须符合两段锁协议。两段锁协议。第55页/共80页2023/3/2556两段锁协议(a)遵守两段锁协
43、议 (b)不遵守两段锁协议 (c)不遵守两段锁协议 Slock BSlock B读读B=2B=2Y=BY=BUnlock BUnlock BXlock AXlock A A=Y+1A=Y+1写回写回A=3A=3Unlock AUnlock A Slock ASlock A等待等待等待等待等待等待Slock ASlock A读读A=3A=3X=AX=AUnlock AUnlock AXlock BXlock BB=X+1B=X+1写回写回B=4B=4Unlock BUnlock B Slock BSlock B读读B=2B=2Y=BY=BUnlock BUnlock BXlock AXlock
44、AA=Y+1A=Y+1写回写回A=3A=3Unlock AUnlock ASlock ASlock A读读A=2A=2X=AX=AUnlock AUnlock AXlock BXlock B等待等待Xlock BXlock BB=X+1B=X+1写回写回B=3B=3Unlock BUnlock BSlock BSlock B读读B=2B=2Y=BY=BXlock AXlock A A=Y+1A=Y+1写回写回A=3 A=3 Unlock BUnlock BUnlock AUnlock AT1T2T1T2T1T2Slock ASlock A 等待等待 等待等待 等待等待 等待等待Slock AS
45、lock A读读A=3A=3Y=A Y=A Xlock BXlock BB=Y+1B=Y+1写回写回B=4B=4Unlock BUnlock BUnlock AUnlock A 第56页/共80页2023/3/2557两段锁协议两段锁协议与防止死锁的一次封锁法两段锁协议与防止死锁的一次封锁法 一次封锁法要求每个事务必须一次将所有要使用的一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议封锁法遵守两段锁协议 但是两段锁协议并不要求事务必须一次将所有要但是两段锁协议并不要求事务必须一次将所有要使用的数
46、据全部加锁,因此遵守两段锁协议的事务使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁可能发生死锁第57页/共80页2023/3/2558两段锁协议遵守两段锁协议的事务发生死锁遵守两段锁协议的事务发生死锁T T1 1Slock BSlock B读读B=2B=2 Xlock AXlock A等待等待等待等待T T2 2 Slock ASlock A读读A=2A=2 Xlock BXlock B等待等待第58页/共80页2023/3/2559两段锁协议两段锁协议与三级封锁协议两段锁协议与三级封锁协议 两类不同目的的协议两类不同目的的协议 遵守第三级封锁协议必然遵守两段锁协议遵守第三级封锁协议
47、必然遵守两段锁协议 两段锁协议保证并发调度的正确性两段锁协议保证并发调度的正确性 三级封锁协议在不同程度上保证数据一致性三级封锁协议在不同程度上保证数据一致性第59页/共80页2023/3/256011.6 封锁的粒度封锁粒度封锁粒度多粒度封锁多粒度封锁意向锁意向锁第60页/共80页2023/3/2561封锁粒度一、什么是封锁粒度一、什么是封锁粒度二、选择封锁粒度的原则二、选择封锁粒度的原则第61页/共80页2023/3/2562一、什么是封锁粒度X X锁和锁和S S锁都是加在某一个数据对象上的锁都是加在某一个数据对象上的封锁的对象:逻辑单元,物理单元封锁的对象:逻辑单元,物理单元 例:在关系
48、数据库中,封锁对象:例:在关系数据库中,封锁对象:逻辑单元:属性值、属性值集合、元组、关系、逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等索引项、整个索引、整个数据库等 物理单元:页(数据页或索引页)、物理记录等物理单元:页(数据页或索引页)、物理记录等第62页/共80页2023/3/2563一、什么是封锁粒度封锁对象可以很大也可以很小封锁对象可以很大也可以很小例:例:对整个数据库加锁对整个数据库加锁对某个属性值加锁对某个属性值加锁封锁对象的大小称为封锁的粒度封锁对象的大小称为封锁的粒度(Granularity)Granularity)多粒度封锁多粒度封锁(multi
49、plegranularitylocking)multiplegranularitylocking)在一个系统中同时支持多种封锁粒度供不同的事务在一个系统中同时支持多种封锁粒度供不同的事务选择选择第63页/共80页2023/3/2564二、选择封锁粒度的原则封锁的粒度越封锁的粒度越大,小,大,小,系统被封锁的对象系统被封锁的对象少,多,少,多,并发度并发度小,高,小,高,系统开销系统开销小,大,小,大,选择封锁粒度:选择封锁粒度:考虑封锁开销和并发度两个因素考虑封锁开销和并发度两个因素对系统开销与并发度进行权衡对系统开销与并发度进行权衡第64页/共80页2023/3/2565二、选择封锁粒度的原
50、则需要处理多个关系的大量元组的用户事务:以数据库需要处理多个关系的大量元组的用户事务:以数据库为封锁单位为封锁单位需要处理大量元组的用户事务:以关系为封锁单元需要处理大量元组的用户事务:以关系为封锁单元只处理少量元组的用户事务:以元组为封锁单位只处理少量元组的用户事务:以元组为封锁单位第65页/共80页2023/3/2566多粒度封锁多粒度树多粒度树 以树形结构来表示多级封锁粒度以树形结构来表示多级封锁粒度 根结点是整个数据库,表示最大的数据粒度根结点是整个数据库,表示最大的数据粒度 叶结点表示最小的数据粒度叶结点表示最小的数据粒度例:三级粒度树。根结点为数据库,数据库的子结点为例:三级粒度树