《数据库系统概论(第五版)ppt课件第11章.ppt》由会员分享,可在线阅读,更多相关《数据库系统概论(第五版)ppt课件第11章.ppt(111页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、An Introduction to Database Systemxx大学信息学院大学信息学院数据库系统概论An Introduction to Database System第十一章第十一章 并发控制并发控制An Introduction to Database System 并发控制并发控制v多用户数据库系统多用户数据库系统 允许多个用户同时使用的数据库系统允许多个用户同时使用的数据库系统n飞机定票数据库系统飞机定票数据库系统n银行数据库系统银行数据库系统 n特点:在同一时刻并发运行的事务数可达数百上千个特点:在同一时刻并发运行的事务数可达数百上千个 An Introduction to
2、 Database System 并发控制(续)并发控制(续)v多事务执行方式多事务执行方式 (1)事务串行执行)事务串行执行n每个时刻只有一个事务运行,其他事务每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行必须等到这个事务结束以后方能运行n不能充分利用系统资源,发挥数据库共不能充分利用系统资源,发挥数据库共享资源的特点享资源的特点T1T2T3事务的串行执行方式事务的串行执行方式An Introduction to Database System并发控制(续)并发控制(续)n在单处理机系统中,事务的并行执行在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉是这
3、些并行事务的并行操作轮流交叉运行运行n单处理机系统中的并行事务并没有真单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的正地并行运行,但能够减少处理机的空闲时间,提高系统的效率空闲时间,提高系统的效率(2)交叉并发方式()交叉并发方式(Interleaved Concurrency)An Introduction to Database System并发控制(续)并发控制(续) (3)同时并发方式()同时并发方式(simultaneous concurrency)n多处理机系统中,每个处理机可以运行一个事务,多多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个
4、事务,实现多个事务真正个处理机可以同时运行多个事务,实现多个事务真正的并行运行的并行运行n最理想的并发方式,但受制于硬件环境最理想的并发方式,但受制于硬件环境n更复杂的并发方式机制更复杂的并发方式机制v 本章讨论的数据库系统并发控制技术是以单处理机系统为本章讨论的数据库系统并发控制技术是以单处理机系统为基础的基础的 An Introduction to Database System并发控制(续)并发控制(续)v事务并发执行带来的问题事务并发执行带来的问题n会产生多个事务同时存取同一数据的情况会产生多个事务同时存取同一数据的情况 n可能会存取和存储不正确的数据,破坏事务隔离性和可能会存取和存储
5、不正确的数据,破坏事务隔离性和数据库的一致性数据库的一致性v数据库管理系统必须提供并发控制机制数据库管理系统必须提供并发控制机制v并发控制机制是衡量一个数据库管理系统性能的并发控制机制是衡量一个数据库管理系统性能的重要标志之一重要标志之一An Introduction to Database System第十一章第十一章 并发控制并发控制11.1 并发控制概述并发控制概述11.2 封锁封锁11.3 封锁协议封锁协议11.4 活锁和死锁活锁和死锁11.5 并发调度的可串行性并发调度的可串行性11.6 两段锁协议两段锁协议11.7 封锁的粒度封锁的粒度*11.8 其他并发控制机制其他并发控制机制1
6、1.9 小结小结An Introduction to Database System11.1 并发控制概述并发控制概述v事务是并发控制的基本单位事务是并发控制的基本单位v并发控制机制的任务并发控制机制的任务n对并发操作进行正确调度对并发操作进行正确调度n保证事务的隔离性保证事务的隔离性n保证数据库的一致性保证数据库的一致性An Introduction to Database SystemT1的修改被的修改被T2覆盖了!覆盖了!并发控制概述(续)并发控制概述(续)并发操作带来数据的不一致性实例并发操作带来数据的不一致性实例例例11.1飞机订票系统中的一个活动序列飞机订票系统中的一个活动序列 甲
7、售票点甲售票点(事务事务T1)读出某航班的机票余额读出某航班的机票余额A,设,设A=16; 乙售票点乙售票点(事务事务T2)读出同一航班的机票余额读出同一航班的机票余额A,也为,也为16; 甲售票点卖出一张机票,修改余额甲售票点卖出一张机票,修改余额AA-1,所以,所以A为为15,把把A写回数据库;写回数据库; 乙售票点也卖出一张机票,修改余额乙售票点也卖出一张机票,修改余额AA-1,所以,所以A为为15,把把A写回数据库写回数据库 n 结果明明卖出两张机票,数据库中机票余额只减少结果明明卖出两张机票,数据库中机票余额只减少1 An Introduction to Database Syste
8、m并发控制概述(续)并发控制概述(续)v 这种情况称为数据库的不一致性,是由并发操作引起的。这种情况称为数据库的不一致性,是由并发操作引起的。v 在并发操作情况下,对在并发操作情况下,对T1、T2两个事务的操作序列的调度两个事务的操作序列的调度是随机的。是随机的。v 若按上面的调度序列执行,若按上面的调度序列执行,T1事务的修改就被丢失。事务的修改就被丢失。n原因:第原因:第4步中步中T2事务修改事务修改A并写回后覆盖了并写回后覆盖了T1事务的事务的修改修改An Introduction to Database System并发控制概述(续)并发控制概述(续)v并发操作带来的数据不一致性并发操
9、作带来的数据不一致性1.丢失修改(丢失修改(Lost Update)2.不可重复读(不可重复读(Non-repeatable Read)3.读读“脏脏”数据(数据(Dirty Read)v记号记号nR(x):读数据读数据xnW(x):写数据写数据x An Introduction to Database System1. 丢失修改丢失修改v两个事务两个事务T1和和T2读入同一数据并修改,读入同一数据并修改,T2的提交的提交结果破坏了结果破坏了T1提交的结果,导致提交的结果,导致T1的修改被丢失。的修改被丢失。v上面飞机订票例子就属此类上面飞机订票例子就属此类 An Introduction t
10、o Database System丢失修改(续)丢失修改(续)T1T2 R(A)=16 R(A)=16 AA-1 W(A)=15 AA-1 W(A)=15丢失修改丢失修改An Introduction to Database System2. 不可重复读不可重复读v不可重复读是指事务不可重复读是指事务T1读取数据后,事务读取数据后,事务T2 执行更新操作,使执行更新操作,使T1无法再现前一次读取结果。无法再现前一次读取结果。An Introduction to Database System不可重复读(续)不可重复读(续)v不可重复读包括三种情况:不可重复读包括三种情况:(1)事务)事务T1读
11、取某一数据后,读取某一数据后,事务事务T2对其做了修对其做了修改改,当事务,当事务T1再次读该数据时,得到与前一次不再次读该数据时,得到与前一次不同的值同的值 An Introduction to Database System不可重复读(续)不可重复读(续)n T1读取读取B=100进行运算进行运算n T2读取同一数据读取同一数据B,对其进,对其进行修改后将行修改后将B=200写回数据写回数据库。库。n T1为了对读取值校对重读为了对读取值校对重读B,B已为已为200,与第一次读取值,与第一次读取值不一致不一致 T1T2 R(A)=50 R(B)=100 求和求和=150R(B)=100BB
12、*2W(B)=200 R(A)=50 R(B)=200 求和求和=250 (验算不对验算不对)不可重复读不可重复读 例如:例如:An Introduction to Database System不可重复读(续)不可重复读(续)(2)事务)事务T1按一定条件从数据库中读取了某些数据记录后,按一定条件从数据库中读取了某些数据记录后,事务事务T2删除了其中部分记录删除了其中部分记录,当,当T1再次按相同条件读取数再次按相同条件读取数据时,发现某些记录神秘地消失了。据时,发现某些记录神秘地消失了。 (3)事务)事务T1按一定条件从数据库中读取某些数据记录后,按一定条件从数据库中读取某些数据记录后,事
13、事务务T2插入了一些记录插入了一些记录,当,当T1再次按相同条件读取数据时,再次按相同条件读取数据时,发现多了一些记录。发现多了一些记录。 后两种不可重复读有时也称为后两种不可重复读有时也称为幻影幻影现象(现象(Phantom Row)An Introduction to Database System3. 读读“脏脏”数据数据 读读“脏脏”数据是指:数据是指:n事务事务T1修改某一数据,并将其写回磁盘修改某一数据,并将其写回磁盘n事务事务T2读取同一数据后,读取同一数据后,T1由于某种原因被撤销由于某种原因被撤销n这时这时T1已修改过的数据恢复原值,已修改过的数据恢复原值,T2读到的数据就与
14、读到的数据就与数据库中的数据不一致数据库中的数据不一致nT2读到的数据就为读到的数据就为“脏脏”数据,即不正确的数据数据,即不正确的数据 An Introduction to Database System读读“脏脏”数据(续)数据(续)T1T2 R(C)=100 CC*2W(C)=200R(C)=200 ROLLBACK C恢复为恢复为100例如例如读读“脏脏”数据数据 nT1将将C值修改为值修改为200,T2读到读到C为为200nT1由于某种原因撤销,由于某种原因撤销,其修改作废,其修改作废,C恢复原值恢复原值100n这时这时T2读到的读到的C为为200,与数据库内容不一致,与数据库内容不
15、一致,就是就是“脏脏”数据数据 An Introduction to Database System并发控制概述(续)并发控制概述(续)v 数据不一致性:由于数据不一致性:由于并发操作破坏了事务的隔离性并发操作破坏了事务的隔离性v 并发控制就是要用并发控制就是要用正确的方式调度并发操作正确的方式调度并发操作,使一个用户,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不事务的执行不受其他事务的干扰,从而避免造成数据的不一致性一致性 v 对数据库的应用有时允许某些不一致性,例如有些统计工对数据库的应用有时允许某些不一致性,例如有些统计工作涉及数据量很大,读到一些作涉及数据量很大,读到一
16、些“脏脏”数据对统计精度没什数据对统计精度没什么影响,可以降低对一致性的要求以减少系统开销么影响,可以降低对一致性的要求以减少系统开销 v 参见爱课程网参见爱课程网11.1节动画节动画并发操作带来的数据不一致性并发操作带来的数据不一致性An Introduction to Database System并发控制概述(续)并发控制概述(续)v并发控制的主要技术并发控制的主要技术n封锁封锁(Locking)n时间戳时间戳(Timestamp)n乐观控制法乐观控制法n多版本并发控制多版本并发控制(MVCC)An Introduction to Database System第十一章第十一章 并发控制
17、并发控制11.1 并发控制概述并发控制概述11.2 封锁封锁11.3 封锁协议封锁协议11.4 活锁和死锁活锁和死锁11.5 并发调度的可串行性并发调度的可串行性11.6 两段锁协议两段锁协议11.7 封锁的粒度封锁的粒度*11.8 其他并发控制机制其他并发控制机制11.9 小结小结An Introduction to Database System11.2 封锁封锁v什么是封锁什么是封锁v基本封锁类型基本封锁类型v锁的相容矩阵锁的相容矩阵An Introduction to Database System什么是封锁什么是封锁v 封锁就是事务封锁就是事务T在对某个数据对象(例如表、记录等)操在
18、对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁作之前,先向系统发出请求,对其加锁v 加锁后事务加锁后事务T就对该数据对象有了一定的控制,在事务就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。释放它的锁之前,其它的事务不能更新此数据对象。v 封锁是实现并发控制的一个非常重要的技术封锁是实现并发控制的一个非常重要的技术An Introduction to Database System基本封锁类型基本封锁类型v一个事务对某个数据对象加锁后究竟拥有什么样一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。的控制由封锁的类型决定。
19、v基本封锁类型基本封锁类型n排它锁(排它锁(Exclusive Locks,简记为,简记为X锁)锁)n共享锁(共享锁(Share Locks,简记为,简记为S锁)锁)An Introduction to Database System排它锁排它锁v排它锁又称为写锁排它锁又称为写锁v若事务若事务T对数据对象对数据对象A加上加上X锁,则只允许锁,则只允许T读取读取和修改和修改A,其它任何事务都不能再对,其它任何事务都不能再对A加任何类型加任何类型的锁,直到的锁,直到T释放释放A上的锁上的锁v保证其他事务在保证其他事务在T释放释放A上的锁之前不能再读取和上的锁之前不能再读取和修改修改A An Int
20、roduction to Database System共享锁共享锁v共享锁又称为读锁共享锁又称为读锁v若事务若事务T对数据对象对数据对象A加上加上S锁,则事务锁,则事务T可以读可以读A但不能修改但不能修改A,其它事务只能再对,其它事务只能再对A加加S锁,而不锁,而不能加能加X锁,直到锁,直到T释放释放A上的上的S锁锁v保证其他事务可以读保证其他事务可以读A,但在,但在T释放释放A上的上的S锁之锁之前不能对前不能对A做任何修改做任何修改 An Introduction to Database System锁的相容矩阵锁的相容矩阵Y=Yes,相容的请求,相容的请求N=No,不相容的请求,不相容的
21、请求T1XS_XNNYSNYY_YYYT2An Introduction to Database System锁的相容矩阵(续)锁的相容矩阵(续)在锁的相容矩阵中:在锁的相容矩阵中:v 最左边一列表示事务最左边一列表示事务T1已经获得的数据对象上的锁的类型,已经获得的数据对象上的锁的类型,其中横线表示没有加锁。其中横线表示没有加锁。v 最上面一行表示另一事务最上面一行表示另一事务T2对同一数据对象发出的封锁请对同一数据对象发出的封锁请求。求。v T2的封锁请求能否被满足用矩阵中的的封锁请求能否被满足用矩阵中的Y和和N表示表示n Y表示事务表示事务T2的封锁要求与的封锁要求与T1已持有的锁相容,
22、封锁请求可已持有的锁相容,封锁请求可以满足以满足n N表示表示T2的封锁请求与的封锁请求与T1已持有的锁冲突,已持有的锁冲突,T2的请求被拒绝的请求被拒绝An Introduction to Database System第十一章第十一章 并发控制并发控制11.1 并发控制概述并发控制概述11.2 封锁封锁11.3 封锁协议封锁协议11.4 活锁和死锁活锁和死锁11.5 并发调度的可串行性并发调度的可串行性11.6 两段锁协议两段锁协议11.7 封锁的粒度封锁的粒度*11.8 其他并发控制机制其他并发控制机制11.9 小结小结An Introduction to Database System
23、11.3 封锁协议封锁协议v什么是封锁协议什么是封锁协议n在运用在运用X锁和锁和S锁对数据对象加锁时,需要约定一些规锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(则,这些规则为封锁协议(Locking Protocol)。)。 l何时申请何时申请X锁或锁或S锁锁l持锁时间持锁时间l何时释放何时释放n对封锁方式规定不同的规则,就形成了各种不同的封对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。调度提供一定的保证。An Introduction to Database Syst
24、em保持数据一致性的常用封锁协议保持数据一致性的常用封锁协议v三级封锁协议三级封锁协议1.一级封锁协议一级封锁协议2.二级封锁协议二级封锁协议3.三级封锁协议三级封锁协议An Introduction to Database System1. 一级封锁协议一级封锁协议v一级封锁协议一级封锁协议n事务事务T在修改数据在修改数据R之前必须先对其加之前必须先对其加X锁,直到事务锁,直到事务结束才释放。结束才释放。l正常结束(正常结束(COMMIT)l非正常结束(非正常结束(ROLLBACK)v一级封锁协议可防止丢失修改,并保证事务一级封锁协议可防止丢失修改,并保证事务T是是可恢复的。可恢复的。v在一
25、级封锁协议中,如果仅仅是读数据不对其进在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重行修改,是不需要加锁的,所以它不能保证可重复读和不读复读和不读“脏脏”数据。数据。An Introduction to Database System使用封锁机制解决丢失修改问题使用封锁机制解决丢失修改问题T1T2 Xlock A R(A)=16Xlock A AA-1等待等待 W(A)=15等待等待 Commit等待等待 Unlock A等待等待获得获得Xlock AR(A)=15AA-1W(A)=14CommitUnlock A例:例:n 事务事务T1在读在读A进行修改
26、进行修改之前先对之前先对A加加X锁锁n 当当T2再请求对再请求对A加加X锁时锁时被拒绝被拒绝n T2只能等待只能等待T1释放释放A上上的锁后获得对的锁后获得对A的的X锁锁n 这时这时T2读到的读到的A已经是已经是T1更新过的值更新过的值15n T2按此新的按此新的A值进行运值进行运算,并将结果值算,并将结果值A=14写写回到磁盘。避免了丢失回到磁盘。避免了丢失T1的更新。的更新。没有丢失修改没有丢失修改An Introduction to Database System2. 二级封锁协议二级封锁协议v二级封锁协议二级封锁协议n一级封锁协议加上事务一级封锁协议加上事务T在读取数据在读取数据R之前
27、必须先对其之前必须先对其 加加S锁,读完后即可释放锁,读完后即可释放S锁。锁。v二级封锁协议可以防止丢失修改和读二级封锁协议可以防止丢失修改和读“脏脏”数据。数据。v在二级封锁协议中,由于读完数据后即可释放在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。锁,所以它不能保证可重复读。An Introduction to Database System使用封锁机制解决读使用封锁机制解决读“脏脏”数据问题数据问题T1T2 Xlock C R(C)=100 CC*2 W(C)=200Slock C等待等待ROLLBACK等待等待 (C恢复为恢复为100)等待等待 Unlock C
28、等待等待获得获得Slock CR(C)=100Commit CUnlock C例例n 事务事务T1在对在对C进行修改之前,进行修改之前,先对先对C加加X锁,修改其值后写锁,修改其值后写回磁盘回磁盘n T2请求在请求在C上加上加S锁,因锁,因T1已在已在C上加了上加了X锁,锁,T2只能等待只能等待n T1因某种原因被撤销,因某种原因被撤销,C恢复恢复为原值为原值100n T1释放释放C上的上的X锁后锁后T2获得获得C上上的的S锁,读锁,读C=100。避免了。避免了T2读读“脏脏”数据数据不读不读“脏脏”数据数据 An Introduction to Database System3. 三级封锁协
29、议三级封锁协议v三级封锁协议三级封锁协议n一级封锁协议加上事务一级封锁协议加上事务T在读取数据在读取数据R之前必须先对其之前必须先对其加加S锁,直到事务结束才释放。锁,直到事务结束才释放。v三级封锁协议可防止丢失修改、读脏数据和不可三级封锁协议可防止丢失修改、读脏数据和不可重复读。重复读。An Introduction to Database System使用封锁机制解决不可重复读问题使用封锁机制解决不可重复读问题T1T2 Slock A Slock B R(A)=50 R(B)=100 求和求和=150 Xlock B等待等待 R(A)=50等待等待 R(B)=100等待等待 求和求和=15
30、0等待等待 Commit等待等待 Unlock A等待等待 Unlock B等待等待获得获得XlockBR(B)=100BB*2W(B)=200CommitUnlock Bn 事务事务T1在读在读A,B之前,先对之前,先对A,B加加S锁锁n 其他事务只能再对其他事务只能再对A,B加加S锁,而锁,而不能加不能加X锁,即其他事务只能读锁,即其他事务只能读A,B,而不能修改,而不能修改n 当当T2为修改为修改B而申请对而申请对B的的X锁时被锁时被拒绝只能等待拒绝只能等待T1释放释放B上的锁上的锁n T1为验算再读为验算再读A,B,这时读出的,这时读出的B仍是仍是100,求和结果仍为,求和结果仍为15
31、0,即可,即可重复读重复读n T1结束才释放结束才释放A,B上的上的S锁。锁。T2才才获得对获得对B的的X锁锁 可重复读可重复读An Introduction to Database System4封锁协议小结封锁协议小结v三级协议的主要区别三级协议的主要区别n什么操作需要申请封锁以及何时释放锁(即持锁时间)什么操作需要申请封锁以及何时释放锁(即持锁时间)v不同的封锁协议使事务达到的一致性级别不同不同的封锁协议使事务达到的一致性级别不同n封锁协议级别越高,一致性程度越高封锁协议级别越高,一致性程度越高 X锁锁S锁锁一致性保证一致性保证 操作结操作结束释放束释放事务结事务结束释放束释放操作结操作
32、结束释放束释放事务结事务结束释放束释放不丢失不丢失修改修改不读不读“脏脏”数据数据可重复可重复读读一级封锁协议一级封锁协议 二级封锁协议二级封锁协议 三级封锁协议三级封锁协议 表表11.1 不同级别的封锁协议和一致性保证不同级别的封锁协议和一致性保证An Introduction to Database System第十一章第十一章 并发控制并发控制11.1 并发控制概述并发控制概述11.2 封锁封锁11.3 封锁协议封锁协议11.4 活锁和死锁活锁和死锁11.5 并发调度的可串行性并发调度的可串行性11.6 两段锁协议两段锁协议11.7 封锁的粒度封锁的粒度*11.8 其他并发控制机制其他并
33、发控制机制11.9 小结小结An Introduction to Database System11.4 活锁和死锁活锁和死锁v封锁技术可以有效地解决并行操作的一致性问题,封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题但也带来一些新的问题n死锁死锁n活锁活锁An Introduction to Database System11.4.1 活锁活锁11.4.2 死锁死锁11.4 活锁和死锁活锁和死锁An Introduction to Database System11.4.1 活锁活锁v 事务事务T1封锁了数据封锁了数据Rv 事务事务T2又请求封锁又请求封锁R,于是,于是T2
34、等待。等待。v T3也请求封锁也请求封锁R,当,当T1释放了释放了R上的封锁之后系统首先批上的封锁之后系统首先批准了准了T3的请求,的请求,T2仍然等待。仍然等待。v T4又请求封锁又请求封锁R,当,当T3释放了释放了R上的封锁之后系统又批准上的封锁之后系统又批准了了T4的请求的请求v T2有可能永远等待,这就是有可能永远等待,这就是活锁活锁的情形的情形 An Introduction to Database System活锁(续)活锁(续)(a)活活 锁锁T1T2T3T4Lock RLock R等待等待Lock R等待等待Lock RUnlock R等待等待等待等待等待等待Lock R等待等
35、待等待等待等待等待等待等待Unlock等待等待等待等待Lock R等待等待An Introduction to Database System活锁(续)活锁(续)v避免活锁:避免活锁:采用先来先服务的策略采用先来先服务的策略n当多个事务请求封锁同一数据对象时当多个事务请求封锁同一数据对象时n按请求封锁的先后次序对这些事务排队按请求封锁的先后次序对这些事务排队n该数据对象上的锁一旦释放,首先批准申请队列中第该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁一个事务获得锁An Introduction to Database System11.4.1 活锁活锁11.4.2 死锁死锁11.
36、4 活锁和死锁活锁和死锁An Introduction to Database System11.4.2 死锁死锁v 事务事务T1封锁了数据封锁了数据R1v T2封锁了数据封锁了数据R2v T1又请求封锁又请求封锁R2,因,因T2已封锁了已封锁了R2,于是,于是T1等待等待T2释放释放R2上的锁上的锁v 接着接着T2又申请封锁又申请封锁R1,因,因T1已封锁了已封锁了R1,T2也只能等待也只能等待T1释放释放R1上的锁上的锁v 这样这样T1在等待在等待T2,而,而T2又在等待又在等待T1,T1和和T2两个事务永远两个事务永远不能结束,形成不能结束,形成死锁死锁 An Introduction
37、to Database System死锁(续)死锁(续)T1T2Lock R1Lock R2Lock R2等待等待等待等待等待等待Lock R1等待等待等待等待等待等待等待等待 (b) 死锁死锁An Introduction to Database System解决死锁的方法解决死锁的方法两类方法两类方法1. 死锁的预防死锁的预防2. 死锁的诊断与解除死锁的诊断与解除An Introduction to Database System1. 死锁的预防死锁的预防v 产生死锁的原因是两个或多个事务都已封锁了一些数据对产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封
38、锁的数据对象加锁,象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。从而出现死等待。v 预防死锁的发生就是要破坏产生死锁的条件预防死锁的发生就是要破坏产生死锁的条件An Introduction to Database System死锁的预防(续)死锁的预防(续)预防死锁的方法预防死锁的方法(1)一次封锁法一次封锁法(2)顺序封锁法顺序封锁法An Introduction to Database System(1)一次封锁法)一次封锁法v要求每个事务必须一次将所有要使用的数据全要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行部加锁,否则就不能继续执行v存在的问
39、题存在的问题n降低系统并发度降低系统并发度An Introduction to Database System一次封锁法(续)一次封锁法(续)n难于事先精确确定封锁对象难于事先精确确定封锁对象l数据库中数据是不断变化的,原来不要求封锁的数数据库中数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象。事先精确地确定每个事务所要封锁的数据对象。l解决方法:将事务在执行过程中可能要封锁的数据解决方法:将事务在执行过程中可能要封锁的数据对象全部加锁,这就对象全部加锁,这就进一步降低了并发度进
40、一步降低了并发度。An Introduction to Database System(2)顺序封锁法)顺序封锁法v 顺序封锁法是预先对数据对象规定一个封锁顺序,所有事顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。务都按这个顺序实行封锁。v 顺序封锁法存在的问题顺序封锁法存在的问题n 维护成本维护成本 数据库系统中封锁的数据对象极多,并且随数据的插入、数据库系统中封锁的数据对象极多,并且随数据的插入、删除等操作而不断地变化,要维护这样的资源的封锁顺序非删除等操作而不断地变化,要维护这样的资源的封锁顺序非常困难,常困难,成本很高成本很高。n 难以实现难以实现 事务的封
41、锁请求可以随着事务的执行而动态地决定,很难事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就事先确定每一个事务要封锁哪些对象,因此也就很难按规定很难按规定的顺序去施加封锁的顺序去施加封锁 An Introduction to Database System死锁的预防(续)死锁的预防(续)v结论结论n在操作系统中广为采用的预防死锁的策略并不太适合在操作系统中广为采用的预防死锁的策略并不太适合数据库的特点数据库的特点n数据库管理系统在解决死锁的问题上更普遍采用的是数据库管理系统在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法诊断并解除死锁的方法An I
42、ntroduction to Database System2. 死锁的诊断与解除死锁的诊断与解除v死锁的诊断死锁的诊断(1)超时法)超时法(2)等待图法)等待图法 An Introduction to Database System(1) 超时法超时法v 如果一个事务的等待时间超过了规定的时限,就认为如果一个事务的等待时间超过了规定的时限,就认为发生了死锁发生了死锁v 优点:实现简单优点:实现简单v 缺点缺点n有可能误判死锁有可能误判死锁n时限若设置得太长,死锁发生后不能及时发现时限若设置得太长,死锁发生后不能及时发现An Introduction to Database System(2)
43、等待图法)等待图法v用事务等待图动态反映所有事务的等待情况用事务等待图动态反映所有事务的等待情况n事务等待图是一个有向图事务等待图是一个有向图G=(T,U)nT为结点的集合,每个结点表示正运行的事务为结点的集合,每个结点表示正运行的事务nU为边的集合,每条边表示事务等待的情况为边的集合,每条边表示事务等待的情况n若若T1等待等待T2,则,则T1,T2之间划一条有向边,从之间划一条有向边,从T1指向指向T2An Introduction to Database System等待图法(续)等待图法(续) 事务等待图事务等待图n 图图(a)中,事务中,事务T1等待等待T2,T2等待等待T1,产生了死
44、锁,产生了死锁n 图图(b)中,事务中,事务T1等待等待T2,T2等待等待T3,T3等待等待T4,T4又等待又等待T1,产生了死锁产生了死锁 n 图图(b)中,事务中,事务T3可能还等待可能还等待T2,在大回路中又有小的回路,在大回路中又有小的回路 An Introduction to Database System等待图法(续)等待图法(续)v并发控制子系统周期性地(比如每隔数秒)生成并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。如果发现图中存在回路,事务等待图,检测事务。如果发现图中存在回路,则表示系统中出现了死锁。则表示系统中出现了死锁。An Introduction
45、to Database System死锁的诊断与解除(续)死锁的诊断与解除(续)v解除死锁解除死锁n选择一个处理死锁代价最小的事务,将其撤消选择一个处理死锁代价最小的事务,将其撤消n释放此事务持有的所有的锁,使其它事务能继释放此事务持有的所有的锁,使其它事务能继续运行下去续运行下去An Introduction to Database System第十一章第十一章 并发控制并发控制11.1 并发控制概述并发控制概述11.2 封锁封锁11.3 封锁协议封锁协议11.4 活锁和死锁活锁和死锁11.5 并发调度的可串行性并发调度的可串行性11.6 两段锁协议两段锁协议11.7 封锁的粒度封锁的粒度*
46、11.8 其他并发控制机制其他并发控制机制11.9 小结小结An Introduction to Database System11.5 并发调度的可串行性并发调度的可串行性v数据库管理系统对并发事务不同的调度可能会产数据库管理系统对并发事务不同的调度可能会产生不同的结果生不同的结果v串行调度是正确的串行调度是正确的v执行结果等价于串行调度的调度也是正确的,称执行结果等价于串行调度的调度也是正确的,称为可串行化调度为可串行化调度 An Introduction to Database System11.5.1 可串行化调度可串行化调度11.5.2 冲突可串行化调度冲突可串行化调度11.5 并发
47、调度的可串行性并发调度的可串行性An Introduction to Database System11.5.1 可串行化调度可串行化调度v可串行化可串行化(Serializable)调度调度n多个事务的并发执行是正确的,当且仅当其结果与多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同按某一次序串行地执行这些事务时的结果相同v可串行性可串行性(Serializability)n是并发事务正确调度的准则是并发事务正确调度的准则n一个给定的并发调度,当且仅当它是可串行化的,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度才认为是正确调度 An Int
48、roduction to Database System可串行化调度(续)可串行化调度(续)例例11.2现在有两个事务,分别包含下列操作:现在有两个事务,分别包含下列操作:n事务事务T1:读:读B;A=B+1;写回;写回An事务事务T2:读:读A;B=A+1;写回;写回B现给出对这两个事务不同的调度策略现给出对这两个事务不同的调度策略 An Introduction to Database System串行调度串行调度,正确的调度正确的调度T1T2Slock BY=R(B)=2Unlock BXlock AA=Y+1=3W(A)Unlock ASlock AX=R(A)=3Unlock AXl
49、ock BB=X+1=4W(B)Unlock B串行调度串行调度(a)n 假设假设A、B的初值均为的初值均为2。n 按按T1T2次序执行结果次序执行结果为为A=3,B=4 n 串行调度策略串行调度策略,正确的调度正确的调度 An Introduction to Database System串行调度串行调度,正确的调度正确的调度T1T2Slock AX=R(A)=2Unlock AXlock BB=X+1=3W(B)Unlock BSlock BY=R(B)=3Unlock BXlock AA=Y+1=4W(A)Unlock A串行调度串行调度(b)n 假设假设A、B的初值均为的初值均为2。n
50、 T2T1次序执行结果为次序执行结果为B=3,A=4 n 串行调度策略串行调度策略,正确的调度正确的调度 An Introduction to Database System不可串行化调度,错误的调度不可串行化调度,错误的调度T1T2Slock BY=R(B)=2Slock AX=R(A)=2Unlock BUnlock AXlock AA=Y+1=3W(A)Xlock BB=X+1=3W(B)Unlock AUnlock B不可串行化的调度不可串行化的调度 n 执行结果与执行结果与(a)、(b)的结的结果都不同果都不同n 是错误的调度是错误的调度 An Introduction to Dat