资源预览内容
第1页 / 共114页
第2页 / 共114页
第3页 / 共114页
第4页 / 共114页
第5页 / 共114页
第6页 / 共114页
第7页 / 共114页
第8页 / 共114页
第9页 / 共114页
第10页 / 共114页
亲,该文档总共114页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
计算机软件及应用09-DataBase-并发(bngf)控制第一页,共114页。第7章教学时数:4教学目的与要求:了解并发操作所引起的数据不一致的情况。 教学重点:封锁和可串行化调度。教学难点:封锁。本章主要阅读文献资料:1、Date C J, An Introduction to Database System (Ed.7), Addison-Wesley,20002、王珊,陈红:数据库系统原理(yunl)教程, 清华大学出版社,2000第二页,共114页。第7章 并发(bngf)控制7.1 并发控制概述7.2 封锁(fn su)7.3 三级封锁(fn su)协议7.4 活锁和死锁7.5 并发调度的可串行性7.6 两段锁协议7.7 封锁(fn su)的粒度7.8 小结第三页,共114页。 7.1 并发控制(kngzh)概述多事务执行(zhxng)方式 (1)事务串行执行(zhxng)每个时刻只有一个事务运行,其他事务必须等到这个事务结束以前方能运行不能充分利用系统资源,发挥数据库共享资源的特点时间 事务T1T2T3第四页,共114页。并发(bngf)控制续(2)交叉并发方式交叉并发方式事事务务的的并并行行执执行行是是这这些些并并行行事事务务的的并并行行操操作作轮轮流流交叉运行交叉运行是是单单处处理理机机系系统统中中的的并并发发方方式式,能能够够减减少少处处理理机机的的空空闲闲时时间间(shjin),提高系统的效率提高系统的效率时间 T1T2T3第五页,共114页。并发(bngf)控制续(3)同时并发方式同时并发方式 多多处处理理机机系系统统中中,每每个个处处理理机机可可以以运运行行一一个个事事务务,多多个个处处理理机机可可以以同同时时运运行行多多个个事事务务,实现多个事务真正的并行运行实现多个事务真正的并行运行最理想的并发方式,但受制于硬件环境最理想的并发方式,但受制于硬件环境(hunjng)更复杂的并发方式机制更复杂的并发方式机制第六页,共114页。事务并发(bngf)执行带来的问题 时间A郑州Amother北京读数据r200取100(r-100)写入读数据r200存1000(1200)写入因此,对并发(bngf)操作必须加以控制并发(bngf)控制第七页,共114页。并发操作(cozu)带来的数据不一致性丧失修改lost update不 可 (bk)重 复 读 non-repeatable read读“脏数据dirty read第八页,共114页。1. 丧失(sngsh)修改 丧失(sngsh)修改是指事务1与事务2从数据库中读入同一数据并修改,事务1先提,事务2后提交,结果破坏了事务1提交的数据,导致事务1的修改被丧失(sngsh)。第九页,共114页。 三种(sn zhn)数据不一致性 T1T2 读A=16 AA-1 写回A=15读A=16AA-3写回A=13(a)丧失丧失(sngsh)修改修改第十页,共114页。2. 不可(bk)重复读不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法(wf)再读前一次读取结果。第十一页,共114页。 三种(sn zhn)数据不一致性(续) 读B=100 BB*2写回B=200 读A=50 读B=100 求和=150 读A=50 读B=200 求和=250 (验算不对) T2T1(b)不可不可(bk)重复读重复读第十二页,共114页。三类不可(bk)重复读事务1读取某一数据后:1. 事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。2. 事务2删除了其中局部记录,当事务1再次读取数据时,发现某些记录神密地消失了。3. 事务2插入了一些记录,当事务1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为(chn wi)幻影现象phantom row第十三页,共114页。3. 读“脏数据(shj)事务1修改某一数据,并将其写回磁盘事务2读取同一数据后事务1由于某种原因被撤消,这时事务1已修改正的数据恢复原值事务2读到的数据就与数据库中的数据不一致(yzh),是不正确的数据,又称为“脏数据。第十四页,共114页。 三种(sn zhn)数据不一致性读C=200 读C=100 CC*2 写回C ROLLBACK C恢复为100T2T1(c)读读“脏数据脏数据(shj)第十五页,共114页。数据不一致(yzh)的原因 产生上述三种数据不一致的主要(zhyo)原因是并发操作破坏了事务的隔离性。 而并发控制的任务:是用正确的方法调度并发操作,使一个事务的执行不受其它事务的干扰,从而防止造成数据的不一致。第十六页,共114页。并发控制(kngzh)的方法 并发控制的主要(zhyo)技术有封锁,时间戳和乐观控制方法,商用的数据库系统一般都采用封锁方法第十七页,共114页。第7章 并发(bngf)控制7.1 并发控制概述7.2 封锁7.3 三级封锁协议7.4 活锁和死锁7.5 并发调度的可串行性7.6 两段锁协议7.7 封锁的粒度(l d)7.8 小结第十八页,共114页。7.2 封锁(fn su)一、什么(shn me)是封锁二、根本封锁类型三、根本锁的相容矩阵第十九页,共114页。一、什么(shn me)是封锁封锁就是事务T在对某个(mu )数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术第二十页,共114页。7.2 封锁(fn su)一、什么是封锁二、根本(gnbn)封锁类型三、根本(gnbn)锁的相容矩阵第二十一页,共114页。二、根本封锁(fn su)类型DBMS通常提供了多种类型的封锁。一个(y )事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。根本封锁类型排它锁eXclusive lock,简记为X锁共享锁Share lock,简记为S锁第二十二页,共114页。排它锁排它锁又称为写锁假设事务T对数据对象A加上X锁,那么(n me)只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁第二十三页,共114页。共享锁共享锁又称为(chn wi)读锁假设事务T对数据对象A加上S锁,那么其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁第二十四页,共114页。7.2 封锁(fn su)一、什么是封锁二、根本封锁类型(lixng)三、根本锁的相容矩阵第二十五页,共114页。三、锁的相容(xin rn)矩阵Y=Yes,相容的请求,相容的请求N=No,不相容的请求,不相容的请求T1T2XS-XNNYSNYY-YYY第二十六页,共114页。第7章 并发(bngf)控制7.1 并发控制概述7.2 封锁7.3 三级封锁协议7.4 活锁和死锁7.5 并发调度(diod)的可串行性7.6 两段锁协议7.7 封锁的粒度7.8 小结第二十七页,共114页。7.3 三级封锁(fn su)协议在运用X锁和S锁对数据对象加锁时,需要约定一些规那么(n me):何时申请X锁或S锁持锁时间何时释放对这些问题的考虑(kol)、约定就形成了封锁协议Locking Protocol保证数据一致性的三级封锁协议保证并行操作可串行化的两段锁协议第二十八页,共114页。1级封锁(fn su)协议事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放正常结束COMMIT非正常结束ROLLBACK1级封锁协议可防止丧失修改在1级封锁协议中,如果是读数据,不需要加锁的,所以它不能保证(bozhng)可重复读和不读“脏数据。第二十九页,共114页。T1T2 Xlock A 获得 读A=16AA-1 写回A=15 Commit Unlock AXlock A等待等待等待等待获得Xlock A读A=15AA-3写回A=12CommitUnlock A没有丧失没有丧失(sngsh)修改修改第三十页,共114页。1级封锁(fn su)协议读A=15 Xlock A 获得 读A=16 AA-1 写回A=15 RollbackUnlock AT2T1读读“脏数据脏数据(shj)第三十一页,共114页。1级封锁(fn su)协议 Xlock B 获得 读B=100 BB*2 写回B=200 Commit Unlock B读A=50 读B=100 求和=150读A=50 读B=200 求和=250 (验算不对) T2T1不可不可(bk)重复读重复读第三十二页,共114页。 2级封锁(fn su)协议1级封锁协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁2级封锁协议可以防止丧失修改和读“脏数据。在2级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证(bozhng)可重复读。第三十三页,共114页。2级封锁(fn su)协议Slock A等待读A=15Unlock A Xlock A 获得 读A=16 AA-1 写回A=15 RollbackUnlock AT2T1消除消除(xioch)读读“脏数据脏数据第三十四页,共114页。2级封锁(fn su)协议不可不可(bk)重复读重复读Sclock A 获得 读A=50 Unlock A Sclock B 获得 读B=100 Unlock B 求和=150 Xlock B等待等待获得Xlock B读B=100BB*2写回B=200CommitUnlock BT2T1Sclock A 获得 读A=50 Unlock A Sclock B 获得 读B=200 Unlock B 求和=250 (验算不对) T2T1 (续)第三十五页,共114页。 3级封锁(fn su)协议1级封锁协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放3级封锁协议可防止丧失(sngsh)修改、读脏数据和不可重复读。第三十六页,共114页。3级封锁(fn su)协议T1T2 Slock A 读A=50 Slock B 读B=100 求和=150 读A=50 读B=100 求和=150 Commit Unlock A Unlock B Xlock B等待等待等待 等待等待等待等待等待获得Xlock B读B=100BB*2写回B=200CommitUnlock B 可重复可重复(chngf)读读第三十七页,共114页。4封锁(fn su)协议小结第三十八页,共114页。第7章 并发(bngf)控制7.1 并发控制概述7.2 封锁(fn su)7.3 三级封锁(fn su)协议7.4 活锁和死锁7.5 并发调度的可串行性7.6 两段锁协议7.7 封锁(fn su)的粒度7.8 小结第三十九页,共114页。7.4 活锁和死锁封锁技术(jsh)可以有效地解决并行操作的一致性问题,但也带来一些新的问题死锁活锁第四十页,共114页。7.4.1 活锁第四十一页,共114页。如何(rh)防止活锁采用先来(xin li)先效劳的策略:当多个事务请求封锁同一数据对象时按请求封锁的先后次序对这些事务排队该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。第四十二页,共114页。7.4.2 死锁T1 T2 XlockR1.XlockR2等待等待(dngdi)等待等待(dngdi)等待等待(dngdi).XlockR2.XlockR1等待等待(dngdi)等待等待(dngdi).第四十三页,共114页。解决(jiju)死锁的方法两类方法(fngf)1. 预防死锁2. 死锁的诊断与解除第四十四页,共114页。1. 死锁的预防(yfng)产生死锁的原因是两个或多个(du )事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。预防死锁的发生就是要破坏产生死锁的条件第四十五页,共114页。死锁的预防(yfng)续预防(yfng)死锁的方法 一次封锁法 顺序封锁法第四十六页,共114页。1一次封锁(fn su)法要求每个事务必须一次将所有要使用的数据全部加锁,否那么就不能继续执行一次封锁法存在的问题(wnt):降低并发度 扩大封锁范围将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度第四十七页,共114页。一次封锁(fn su)法续难于事先精确确定封锁对象数据库中数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务(shw)所要封锁的数据对象解决方法:将事务(shw)在执行过程中可能要封锁的数据对象全部加锁,这就进一步降低了并发度。第四十八页,共114页。2顺序(shnx)封锁法顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。顺序封锁法存在的问题 维护本钱高数据库系统中可封锁的数据对象极其众多,并且随数据的插入、删除等操作而不断地变化,要维护这样极多而且(r qi)变化的资源的封锁顺序非常困难,本钱很高第四十九页,共114页。顺序(shnx)封锁法续难于(nny)实现事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。 例:规定数据对象的封锁顺序为A,B,C,D,E。事务T3起初要求封锁数据对象B,C,E,但当它封锁了B,C后,才发现还需要封锁A,这样就破坏了封锁顺序.第五十页,共114页。死锁的预防(yfng)续结论(jiln)在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法第五十一页,共114页。2. 死锁的诊断(zhndun)与解除允许死锁发生解除死锁由DBMS的并发控制子系统定期(dngq)检测系统中是否存在死锁一旦检测到死锁,就要设法解除第五十二页,共114页。检测(jin c)死锁:超时法如果一个事务的等待时间超过了规定的时限,就认为发生了死锁优点:实现简单缺点有可能误判死锁时限假设(jish)设置得太长,死锁发生后不能及时发现第五十三页,共114页。等待(dngdi)图法用事务等待图动态反映所有事务的等待情况事务等待图是一个有向图G=(T,U)T为结点的集合,每个结点表示正运行的事务U为边的集合,每条边表示事务等待的情况假设T1等待T2,那么T1,T2之间划一条有向边,从T1指向T2并发控制子系统周期性地比方每隔1 min检测事务等待图,如果发现图中存在(cnzi)回路,那么表示系统中出现了死锁。第五十四页,共114页。死锁的诊断(zhndun)与解除续解除死锁选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行(ynxng)下去。第五十五页,共114页。第7章 并发(bngf)控制7.1 并发控制概述7.2 封锁7.3 三级封锁协议(xiy)7.4 活锁和死锁7.5 并发调度的可串行性7.6 两段锁协议(xiy)7.7 封锁的粒度7.8 小结第五十六页,共114页。7.5 并发(bngf)调度的可串行性一、什么样的并发操作调度是正确的二、如何(rh)保证并发操作的调度是正确的第五十七页,共114页。一、什么样的并发一、什么样的并发(bngf)操作调度是操作调度是正确的正确的 计算机系统对事务计算机系统对事务(shw)的调度是随机的,的调度是随机的,而不同的调度可能会产生不同的结果。而不同的调度可能会产生不同的结果。串行的串行的 有有n个事务个事务(shw),就有,就有n!种可!种可能能它总是正确的因为它能保证它总是正确的因为它能保证事务在运行过程中,不受其它事务在运行过程中,不受其它事务的干扰。事务的干扰。并行的并行的可能正确可能正确可能不正确可能不正确第五十八页,共114页。什么样的并发操作调度(diod)是正确的续 几个事务的并行几个事务的并行(bngxng)执行是正确的,执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行结果相同。这种并行(bngxng)调度策略称为可串调度策略称为可串行化的调度。行化的调度。第五十九页,共114页。什么样的并发(bngf)操作调度是正确的续 可串行性是并行可串行性是并行(bngxng)事务正确事务正确性的准那么性的准那么例:现在有两个事务,分别包含以下操作:例:现在有两个事务,分别包含以下操作: 事务事务1:读:读B;A=B+1;写回;写回A; 事务事务2:读:读A;B=A+1;写回;写回B; 假设假设A的初值为的初值为2,B的初值为的初值为2。第六十页,共114页。什么样的并发操作调度什么样的并发操作调度(diod)是正确的续是正确的续对这两个事务的不同调度对这两个事务的不同调度(diod)策略策略串行执行串行执行串行调度串行调度(diod)策略策略1T1 T2串行调度串行调度(diod)策略策略2T2 T1并行执行并行执行不可串行化的调度不可串行化的调度(diod)可串行化的调度可串行化的调度(diod) 第六十一页,共114页。(a) 可串行化调度(diod)策略SlockBXlockA读读B2A=B+1写回写回A(3)UnlockAUnlockBSlock A等待等待(dngdi)Xlock B等待等待(dngdi)Slock AXlock B读读A3B=A+1写回写回B(4)Unlock BUnlock A T1T2第六十二页,共114页。(b) 可串行化调度(diod)策略Slock B等待等待(dngdi)Xlock A等待等待(dngdi)Slock BXlock A读读B3A=B+1写回写回A(4)Unlock AUnlock B SlockAXlockB读读A2B=A+1写回写回B(=3)UnlockBUnlockAT1T2第六十三页,共114页。(c) 可串行化的调度(diod)SlockBY=B=2UnlockBXlockAA=Y+1写回写回A(=3)UnlockASlockA等待等待(dngdi)等待等待(dngdi)等待等待(dngdi)X=A=3UnlockAXlockBB=X+1写回写回B(=4)UnlockBT1T2第六十四页,共114页。可串行化的调度(diod)续由于其执行结果与串行调度的执行结果相同,所以(suy)是正确的调度。第六十五页,共114页。(d) 不可(bk)串行化的调度SlockBY=B=2UnlockBXlockAA=Y+1写回写回A(=3)UnlockASlockAX=A=2UnlockAXlockBB=X+1写回写回B(=3)UnlockBT1T2第六十六页,共114页。(d) 不可(bk)串行化的调度(续)由于其执行结果(ji gu)与任意串行的结果(ji gu)都不同,所以是错误的调度。第六十七页,共114页。讨论(toln)可串行化是并行事务执行正确可串行化是并行事务执行正确性的必要但不充分条件如设性的必要但不充分条件如设A的初始值为的初始值为0, 事务事务T1:A=A+2 事务事务T2:A=A*2如右表事务的执行结果虽然和如右表事务的执行结果虽然和串行的结果相同串行的结果相同(xin tn),但并不正确。,但并不正确。充分必要条件是什么呢?充分必要条件是什么呢?数据不一致的情况没有发生。数据不一致的情况没有发生。SlockAY=A=0UnlockAXlockAA=Y*2写回写回A(=0)UnlockASlockAX=A=0UnlockAXlockAA=X+2写回写回A(=2)UnlockAT1T2第六十八页,共114页。7.5 并发(bngf)调度的可串行性一、什么样的并发操作调度(diod)是正确的二、如何保证并发操作的调度(diod)是正确的第六十九页,共114页。二、如何保证(bozhng)并发操作的调度是正确的保证并发(bngf)操作调度正确性的方法封锁方法:两段锁Two-Phase Locking,简称2PL协议时标方法乐观方法第七十页,共114页。第7章 并发(bngf)控制7.1 并发(bngf)控制概述7.2 封锁7.3 三级封锁协议7.4 活锁和死锁7.5 并发(bngf)调度的可串行性7.6 两段锁协议7.7 封锁的粒度7.8 小结第七十一页,共114页。7.6 两段锁协议(xiy)两段锁协议的内容1. 在对任何数据进行读、写操作之前,事务首先(shuxin)要获得对该数据的封锁2. 在释放一个封锁之后,事务不再获得任何其他封锁。第七十二页,共114页。两段锁协议(xiy)续“两段锁的含义(hny)事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段; 第二阶段是释放封锁,也称为收缩阶段。第七十三页,共114页。两段锁协议(xiy)续例:事务1的封锁序列:Slock A . Slock B . Xlock C . Unlock B . Unlock A . Unlock C;遵守(znshu)两段锁协议事务2的封锁序列(xli):Slock A . Unlock A . Slock B . Xlock C . Unlock C . Unlock B;不遵守两段协议。第七十四页,共114页。两段锁协议(xiy)续 所有遵守两段锁协议的事务,其并行执行的结果(ji gu)一定是正确的。 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件 可串行化的调度中,不一定所有事务都必须符合两段锁协议。第七十五页,共114页。两段锁协议(xiy)续T1SlockB读读Y=B=2XlockAA=Y+1写回写回A=3UnlockBUnlockAT2SlockA等待等待(dngdi)等待等待(dngdi)等待等待(dngdi)等待等待(dngdi)等待等待(dngdi)SlockA读读X=A=3XlockBB=X+1写回写回B=4UnlockBUnlockAT1SlockB读读Y=B=2UnlockBXlockAA=Y+1写回写回A=3UnlockAT2SlockA等待等待(dngdi)等待等待(dngdi)等待等待(dngdi)等待等待(dngdi)SlockA读读X=A=3UnlockAXlockBB=X+1写回写回B=4UnlockB(a)遵守两段锁协议遵守两段锁协议(b)不遵守两段锁协议不遵守两段锁协议T1SlockB读读Y=B=2UnlockBXlockAA=Y+1写回写回A=3UnlockAT2SlockA读读X=A=2UnlockAXlockB等待等待XlockBB=X+1写回写回B=3UnlockB(c)不遵守两段锁协议不遵守两段锁协议第七十六页,共114页。两段锁协议(xiy)续两段锁协议与防止死锁的一次封锁法一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否那么就不能继续执行,因此(ync)一次封锁法遵守两段锁协议但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此(ync)遵守两段锁协议的事务可能发生死锁第七十七页,共114页。两段锁协议(xiy)续 遵守两段锁协议的事务(shw)发生死锁T1SlockB读读B=2XlockA等待等待(dngdi)等待等待(dngdi)T2SlockA读读A=2XlockB等待等待第七十八页,共114页。两段锁协议(xiy)续两段锁协议与三级封锁协议两类不同目的(md)的协议两段锁协议保证并发调度的正确性三级封锁协议在不同程度上保证数据一致性遵守第三级封锁协议必然遵守两段协议第七十九页,共114页。第7章 并发(bngf)控制7.1 并发控制(kngzh)概述7.2 封锁7.3 三级封锁协议7.4 活锁和死锁7.5 并发调度的可串行性7.6 两段锁协议7.7 封锁的粒度7.8 小结第八十页,共114页。7.7 封锁(fn su)的粒度9.7.1 封锁(fn su)粒度9.7.2 多粒度封锁(fn su)9.7.3 意向锁第八十一页,共114页。9.7.1 封锁(fn su)粒度一、什么(shn me)是封锁粒度二、选择封锁粒度的原那么第八十二页,共114页。一、什么(shn me)是封锁粒度X锁和S锁都是加在某一个(y )数据对象上的封锁(fnsu)的对象逻辑单元:属性值、属性值集合、元组、关系、索引项、数据库等物理单元:页数据页或索引页、物理记录等第八十三页,共114页。什么(shn me)是封锁粒度续封锁(fn su)对象可以很大也可以很小 例: 对整个数据库加锁 对某个属性值加锁封锁(fn su)对象的大小称为封锁(fn su)的粒度(Granularity)第八十四页,共114页。9.7.1 封锁(fn su)粒度一、什么是封锁(fn su)粒度二、选择封锁(fn su)粒度的原那么第八十五页,共114页。二、选择(xunz)封锁粒度的原那么封锁(fn su)的粒度越 大,小,系统被封锁(fn su)的对象 少,多,并发度 小,高,系统开销 小,大,第八十六页,共114页。选择(xunz)封锁粒度的原那么续选择封锁粒度时应该同时考虑封锁开销和并发度两个因素,适中选择封锁粒度以求得最优的效果。一般说来,需要处理大量元组的事务可以以关系为封锁粒度;需要处理多个关系的大量元组的事务可以以数据库为封锁粒度;而对于一个处理少量元组的用户事务,以元组为封锁粒度就比较(bjio)适宜了。第八十七页,共114页。7.7 封锁(fn su)的粒度9.7.1 封锁(fn su)粒度9.7.2 多粒度封锁(fn su)9.7.3 意向锁第八十八页,共114页。9.7.2 多粒度(l d)封锁一、存在的问题一、存在的问题情况一:情况一:假设封锁粒度是关系,事务假设封锁粒度是关系,事务T1要修改关系中的元要修改关系中的元组组L1,那么,那么T1必须对包含必须对包含L1的关系的关系R1封锁,如封锁,如果果(rgu)这是这是T2要对要对R1中的元组中的元组L2进行修改,进行修改,就必须等待,直到就必须等待,直到T1释放释放R1,并发度比较低。,并发度比较低。第八十九页,共114页。9.7.2 多粒度(l d)封锁一、存在的问题一、存在的问题情况二:情况二:假设封锁粒度是元组,那么事务假设封锁粒度是元组,那么事务T1和和T2可以可以(ky)同时对同时对L1和和L2封锁,不需要等待,提高系统的并发封锁,不需要等待,提高系统的并发度。可在这种封锁粒度下,假设事务度。可在这种封锁粒度下,假设事务T3要读取整个要读取整个关系关系R2,就必须对表中的每个元组封锁,显然开销,就必须对表中的每个元组封锁,显然开销会很大。会很大。第九十页,共114页。9.7.2 多粒度(l d)封锁二、解决二、解决(jiju)的方法的方法因此因此,如果在一个系统中同时支持多种封锁粒度供不如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封同的事务选择是比较理想的,这种封锁方法称为多粒度封锁锁multiplegranularitylocking。第九十一页,共114页。9.7.2 多粒度(l d)封锁三、多粒度三、多粒度(l d)树树以树形结构来表示多级封锁粒度以树形结构来表示多级封锁粒度(l d)根结点是整个数据库,表示最大的数据粒根结点是整个数据库,表示最大的数据粒度度(l d)叶结点表示最小的数据粒度叶结点表示最小的数据粒度(l d) 第九十二页,共114页。三、多粒度(l d)树续例:三级粒度树。根结点(ji din)为数据库,数据库的子结点(ji din)为关系,关系的子结点(ji din)为元组。数据库数据库关系关系Rn关系关系R1元组元组1元组元组n元组元组2元组元组n-1第九十三页,共114页。9.7.2 多粒度(l d)封锁四、多粒度封锁协议四、多粒度封锁协议允许多粒度树中的每个结点被独立地加锁允许多粒度树中的每个结点被独立地加锁对一个结点加锁意味着这个结点的所有后裔结点也对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁被加以同样类型的锁在多粒度封锁中一个数据对象在多粒度封锁中一个数据对象(duxing)可能以两可能以两种方式封锁:显式封锁和隐式封锁种方式封锁:显式封锁和隐式封锁第九十四页,共114页。9.7.2 多粒度(l d)封锁五、显式封锁和隐式封锁五、显式封锁和隐式封锁显式封锁显式封锁: 直接加到数据对象直接加到数据对象(duxing)上的封上的封锁锁隐式封锁隐式封锁: 由于其上级结点加锁而使该数据对象由于其上级结点加锁而使该数据对象(duxing)加上了锁加上了锁显式封锁和隐式封锁的效果是一样的显式封锁和隐式封锁的效果是一样的第九十五页,共114页。9.7.2 多粒度(l d)封锁六、对某个数据六、对某个数据(shj)对象加锁时系统检查的内容对象加锁时系统检查的内容 该数据该数据(shj)对象对象有无显式封锁与之冲突有无显式封锁与之冲突 所有上级结点所有上级结点检查本领务的显式封锁是否与该数据检查本领务的显式封锁是否与该数据(shj)对象上对象上的隐式封锁冲突:的隐式封锁冲突:(由上级结点封锁造成的由上级结点封锁造成的所有下级结点所有下级结点看上面的显式封锁是否与本领务的隐式封锁将加到看上面的显式封锁是否与本领务的隐式封锁将加到下级结点的封锁冲突。下级结点的封锁冲突。第九十六页,共114页。7.7 封锁(fn su)的粒度9.7.1 封锁(fn su)粒度9.7.2 多粒度封锁(fn su)9.7.3 意向锁第九十七页,共114页。9.7.3 意向锁引进意向锁intention lock目的提高对某个数据(shj)对象加锁时系统的检查效率第九十八页,共114页。什么(shn me)是意向锁对任一结点加根本锁,必须先对它的上层结点加意向锁如果对一个结点加意向锁,那么说明(shumng)该结点的下层结点正在被加锁第九十九页,共114页。常用(chn yn)意向锁意向(yxing)共享锁(Intent Share Lock,简称IS锁)意向(yxing)排它锁(Intent Exclusive Lock,简称IX锁)共享意向(yxing)排它锁(Share Intent Exclusive Lock,简称SIX锁)第一百页,共114页。意向锁续IS锁如果对一个数据对象加IS锁,表示它的后裔结点拟意向加S锁。例:要对某个元组加S锁,那么要首先(shuxin)对关系和数据库加IS锁第一百零一页,共114页。意向锁续IX锁如果对一个数据对象加IX锁,表示它的后裔结点拟意向加X锁。 例:要对某个元组加X锁,那么(n me)要首先对关系和数据库加IX锁。第一百零二页,共114页。意向锁续SIX锁如果对一个数据(shj)对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。 例:对某个表加SIX锁,那么表示该事务要读整个表所以要对该表加S锁,同时会更新个别元组所以要对该表加IX锁。第一百零三页,共114页。意向锁续意向锁的相容(xin rn)矩阵 T1 T2 S X IS IX SIX - S Y N Y N N Y X N N N N N Y IS Y N Y Y Y Y IX N N Y Y N Y SIX N N Y N N Y - Y Y Y Y Y Y 第一百零四页,共114页。意向锁续锁的强度锁的强度是指它对其他锁的排斥程度一个事务在申请封锁(fn su)时以强锁代替弱锁是平安的,反之那么不然SIXXSIX-IS第一百零五页,共114页。意向锁续具有意向锁的多粒度(l d)封锁方法申请封锁时应该按自上而下的次序进行;释放封锁时那么应该按自下而上的次序进行 例:事务T要对一个数据对象加锁,必须先对它的上层结点加意向锁第一百零六页,共114页。第7章 并发(bngf)控制7.1 并发控制概述7.2 封锁(fn su)7.3 三级封锁(fn su)协议7.4 活锁和死锁7.5 并发调度的可串行性7.6 两段锁协议7.7 封锁(fn su)的粒度7.8 小结第一百零七页,共114页。数据共享与数据一致性是一对矛盾数据库的价值在很大程度上取决于它所能提供的数据共享度。数据共享在很大程度上取决于系统(xtng)允许对数据并发操作的程度。数据并发程度又取决于数据库中的并发控制机制另一方面,数据的一致性也取决于并发控制的程度。施加的并发控制愈多,数据的一致性往往愈好。7.8 小结(xioji)第一百零八页,共114页。小结(xioji)续数据库的并发控制以事务为单位数据库的并发控制通常使用封锁(fn su)机制两类最常用的封锁(fn su)不同级别的封锁(fn su)协议提供不同的数据一致性保证,提供不同的数据共享度。三级封锁(fn su)协议第一百零九页,共114页。小结(xioji)续并发控制机制调度并发事务操作是否正确的判别准那么是可串行性并发操作的正确性那么通常由两段锁协议(xiy)来保证。两段锁协议(xiy)是可串行化调度的充分条件,但不是必要条件第一百一十页,共114页。小结(xioji)续对数据对象施加封锁,带来问题(wnt)活锁: 先来先效劳 死锁:预防方法一次封锁法顺序封锁法 死锁的诊断与解除超时法等待图法第一百一十一页,共114页。小结(xioji)续不同的数据库管理系统提供的封锁类型、封锁协议、到达的系统一致性级别不尽相同。但是其依据的根本(gnbn)原理和技术是共同的。第一百一十二页,共114页。谢谢(xixie)大家!第一百一十三页,共114页。内容(nirng)总结计算机软件及应用09-DataBase-并发控制。取100(r-100)写入。CC*2。在运用X锁和S锁对数据对象加锁时,需要约定一些规那么:。SlockA。例:规定数据对象的封锁顺序为A,B,C,D,E。例:现在有两个事务,分别包含以下操作:。(d)不可串行化的调度(续)。例:事务1的封锁序列:。封锁对象可以很大也可以很小。而对于一个处理少量元组的用户事务,以元组为封锁粒度就比较(bjio)适宜了。谢谢大家第一百一十四页,共114页。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号