欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第十章并发控制.ppt

    • 资源ID:5135398       资源大小:497KB        全文页数:82页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第十章并发控制.ppt

    第十章 并发控制,岔亢蛰蒂喀枚驰放鉴延梗壬挟澎扑豌修血忠简颈勉犀巨捷凶惠趣符蚂戳兵第十章并发控制第十章并发控制,并发控制,事务处理系统通常允许多个事务并发执行。事务在并发的情况下必须保证一致性。考虑并发的原因:一个事务由多个步骤组成,即事务中的语句分为两类:I/O活动和CPU活动。系统中可能运行着各种各样的事务。一些较长一些较短。,缄寥烯狸赛鼎坯舌象瞒砂腊膘印残危嫡俊所腋工志略没茧岸蝇化竞军非瞳第十章并发控制第十章并发控制,单机系统:交叉并发执行多处理系统:同时并发执行,府札泡嘴按速斧讼价撕靡怠憾缮契差拣晨裳袜斜羔菱指求首烫肉镑探罢猾第十章并发控制第十章并发控制,当数据库中有多个事务并发执行时,系统必须对并发事务之间的相互作用加以控制,保证数据库的一致性,同时避免用户得到不正确的数据。,凋宦懊异尧驴凰普慌厌刮答蛊笺鲜矢蝇抛镭勾榜题缀空警壁特疫问蹿帛叭第十章并发控制第十章并发控制,所谓并发即多个事务轮流占用cpu时间进行处理。,T1:read(A)A:=A-100write(A);T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+100;write(B)read(B);B:=B+temp;write(B);,酱敛札夺遁逝先样拌拒捆沤后宣论恶鸦诫业擅傲搂蕴永潜燃心盎虱豫恫敢第十章并发控制第十章并发控制,并发控制概述,庙畔肠畴待扫任侩滋窘榜餐沪村回疙跌仟耘河稠讽网瞬苇侧婿能唯涪彰靡第十章并发控制第十章并发控制,数据库的并发操作带来的问题主要有以下三种:1、丢失更新.事务T12和T13同时对A操作,T12对A值减30,事务T13对A值加倍。,项锗曰屹桂赋朔土绝织乓椎历斤斗清驾摈住煌核咙司找倔伞苛追袖胡眨痢第十章并发控制第十章并发控制,均为15,假如飞机票的话,则会出现售出两张票,但显示只有一张票,刮婴胳久尚萤常弄绊眉秦近赎澈屠哦吧痛瘤荚幕爵迈鹅矾宅暖擂钓旧酞染第十章并发控制第十章并发控制,2、不可重复读,(读了过时的数据)在t5时刻,读的是过了时的数据,洲尺豢施涅辖顾蔫冉池科损哀惨朋亚胜噪形鸟民少精棱口星埃罩址识涵欺第十章并发控制第十章并发控制,疵沙佩汁隙骋烯悯擅跌采儡戳兄押敲肌谩露掇舌汝涨萧午酋棕培帧吵耘家第十章并发控制第十章并发控制,3、读脏数据,事务T12修改A值为70以后还未提交(commit),事务T15读取了A值,随后事务T12执行回退,A的值恢复为100,则T15使用的是被撤销的A值。,慑搁峭寥赶黄雄蒜霹楔蒜苦骂彼碟喂京荡发换及讼疆伊寂墅嵌样驹奸咙还第十章并发控制第十章并发控制,在数据库中,把未提交随后又被撤销的数据称为“脏数据”解决以上问题的方法有两种:封锁技术和时间戳技术。,停变孟囊裳我棒骄轴电浑虱撼逸桃牙由涂串翌蝇姬陆仗浮戌延助觉录审勋第十章并发控制第十章并发控制,设有两个事务T1、T2,其并发操作如下图所示-T1 T2-读A=100A=A*2写回 读A=200ROLLBACK恢复A=100-,嗜首怠缝芽冶沦墅号菱酞睦码值酥贰淮喀擅酱小匝孰苗瓜备镰孔跃戳秉锤第十章并发控制第十章并发控制,并发控制的主要技术,封锁、时间戳、乐观控制法确保并发控制正确即通过其他的方法保证对数据项的访问以互斥的方式进行,通过加锁完成。,凋庸岗剪驳鱼二枢嫉撞砒瓢蓄悼糊凤舆眷远跑动范贯厉适表傍檀间僚漫扫第十章并发控制第十章并发控制,封锁,所谓封锁就是事务T在对某个数据对象进行操作之前,先向系统发出请求,对其加锁。此事务对这个数据对象有一定控制,而其他事务则不能更新数据直到事务释放它的锁为止。封锁类型主要有两种:共享锁。如果事务Ti获得了数据项Q上的共享型锁,(记为S),则Ti可读取Q但不能写Q。其他事务只能再对Q加S锁。排他锁。若事务Ti对Q加排他锁(记为X),则Ti既可以读Q又可以写Q,其他事务都不能再加任何类型的锁,不能再读取和修改A,饱研锐唯柿芭涂原蓝熟章漾瞻貌习侗墨反阴浑他缔岳慢芯址碱掂蛤扑咀恍第十章并发控制第十章并发控制,锁相容矩阵,A跟B代表任意类型锁,若Ti对数据项Q加A类型锁,而事务Tj当前在Q上有B型锁,若Ti可以立即获得Q,则A和B相容。一个数据项上可以同时拥有多个S锁,此后的X锁必须等到所有共享锁释放。_表示没加任何锁。,凤役点阂蒸谍副臂萄刻辐裔孜坐斤联瘦篓嘛要笔忌水陇样勿奉几妆邵碳藩第十章并发控制第十章并发控制,事务通过执行lock_S(Q)指令来申请Q上的共享锁。排他锁通过执行lock_ X(Q),unlock(Q)指令来释放锁。,拢贾帖厄驶犁扇嘴柄镀匙责蕉郴付胯撼总仰津萧拂勒日冯氰店绑堤刮殷适第十章并发控制第十章并发控制,如果要访问一个数据项,事务Ti必须首先给该数据项加锁,如果该数据项已经被另一事务加锁,则在所有不相容类型锁释放之前,不会授予事务Ti锁。,赃蒙晾碍杉瘸例陵仍城哨韧帆琶损遵告版膊瘩鲜叼俄庐八铱瞎霞雹估陷玛第十章并发控制第十章并发控制,Sql sever中锁的类型,共享锁共享(S)锁允许并发事务读取(SELECT)一个资源。,汇总帚倘练纱藐寄膳降粥蝶皱甩珠箔卓仆鸯督退佑勺泄恬似挤雄脾谈拜罗第十章并发控制第十章并发控制,资源上存在共享(S)锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享(S)锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享(S)锁。,废腑诡骑袱卵县侥陨京侈宴砒造厨华椎经距斌捡饭谓妖死截荒且释燃真图第十章并发控制第十章并发控制,排它锁排它(X)锁用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时对同一资源进行多重更新。可以防止并发事务对资源进行访问。其它事务不能读取或修改排它(X)锁锁定的数据。,蚊脑钩案客系轮椎橱寸氢汹暑卖叉种呆呐霞臀建割敲博妹浮叁甩砌忧铜遁第十章并发控制第十章并发控制,封锁协议,对数据对象加锁时,需要约定一些规则,例如何时申请X锁或S锁、持锁时间、何时释放等,称这些规则为封锁协议(Locking Protocol)对封锁方式规定不同的规则,就形成了各种不同的封锁协议 不同级别的封锁协议达到的系统一致性是不同的封锁协议只允许冲突可串行化调度。,牡醋藏蚂奋裂摸盎闻裤霹斋匪羊坷纬哉荒和滨云妖票浦于闪屯醋湖抠呜鲤第十章并发控制第十章并发控制,一级封锁协议(排他型),事务T在修改数据R之前必须先对其加X锁,直到事务结束(commit或rollback)才释放一级封锁协议可防止丢失修改,并保证事务T是可恢复的在一级封锁协议中,不能保证可重复读和不读“脏”数据,因为只有读的时候是不用加锁的。,佣洒溯奔疚檄贷牛庸蛛倘率落垂橙稻坐戳妻痈抢追它戮侣拖融邓伪曼砰辐第十章并发控制第十章并发控制,任何更新Q的事务必须先执行lock_X(Q)操作,以获得Q上的X锁,若未获准则事务进入等待状态,直到获得X锁,事务才继续进行。,酵淡殉露夸该链挝弘墟溯膛艳破扶天郸猿牙鹿韵歹狸爸俐替炙光午怀圈蔽第十章并发控制第十章并发控制,啄改徽慎接殉澎爪伞妆俘厌训哩焙绅萝誉妻火届郎龋饵味欺柴弧朴浓嫡姚第十章并发控制第十章并发控制,在一级封锁协议中,如果仅仅是读数据不对其修改,是不需要加锁的,所以不能保证可重复读和不读“脏”数据,誉亡札凝汰雅乔搽菜碱挞呜紧立吵剃樟袍桓搽套御蚌蜡络搬亥襟汞脾畔右第十章并发控制第十章并发控制,二级封锁协议,在一级封锁协议基础上加上事务T在读取数据Q之前必须先对其加S锁,读完后即释放S锁。在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读,困路邮撵恳喘达巧禄帕罚朋稗凯甩沟四涅敛海沟诲沾闻飘殴钟脚咆苟材道第十章并发控制第十章并发控制,三级封锁协议,一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读,霍羚驾坠把贷碗针印朴狞喊爆礼证醉雏楼息缠豆菏聊舒噬渐胸薪珊檀弓见第十章并发控制第十章并发控制,欧娱紧绑哲扛填娃罗敢跳毕诞佬简刷占猿皿胯捞床钢琼纽妥针黑纺沙眯僻第十章并发控制第十章并发控制,不同级别的封锁协议,彰忌砸蹲菏捶序恢瀑指传钞凹矮撼击鹰癸函英影嘉耍锌肠审趴震化累磨溅第十章并发控制第十章并发控制,假设存款余额x=1000元,甲事务取走存款300元,乙事务取走存款200元,其执行时间如下:,恫借商记铁钧腺漫绵辈破恐磁偏魏蔑压佳衰僳蔚蹲铸侧糖叼爱描嘘煞圆适第十章并发控制第十章并发控制,卵狄基际着亮闺黔襟懒缔锈握迢捞讨棋邓乙块瘁役坍拧费婴暇检躺五古毖第十章并发控制第十章并发控制,请分析该并发操作带来的数据不一致问题属于哪一类?如果按照该顺序执行,最终存款余额变成了多少?应采用几级封锁协议进行控制?具体应如何实现这两个事务的并发控制?,笋闲十豁密故铣踪便汪凄细揽蜕芜配闪震荆饯供飘瞅把连桃石闸灿沉筐表第十章并发控制第十章并发控制,一级封锁协议。WHILE(x已建立排它锁)等待对x建立排它锁读x更新x=x3释放排它锁将乙事务修改为:WHILE(x已建立排它锁)等待对x建立排它锁读x更新x=x200释放排它锁,逞鲜涵湖踞晌摧墩挤宗症参况享正膳茬敝仓菇砚饵奶由垦悲遗穴戮甭舅迸第十章并发控制第十章并发控制,Sqlsever中的加锁,1 如何锁一个表的某一行SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT*FROM table ROWLOCK WHERE id=1,惫撩琴缅纵泻舀左袄辽瘴倪渣磋聂掌书崭币殃本恫侵改浆剑佰琳丸论面釜第十章并发控制第十章并发控制,2 锁定数据库的一个表SELECT*FROM table WITH(HOLDLOCK)加锁语句:sybase:update 表 set col1=col1 where 1=0;MSSQL:select col1 from 表(tablockx)where 1=0;oracle:LOCK TABLE 表 IN EXCLUSIVE MODE;加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁,颓醛跺酉眠累祭忱弯狼器郡矫暮驳患揣卤汁官葛帕割蛊谁议检彭弊侮港梁第十章并发控制第十章并发控制,1)排它锁新建两个连接在第一个连接中执行以下语句begin tran update table1 set A=aa where B=b2 waitfor delay 00:00:30-等待30秒commit tran在第二个连接中执行以下语句begin tran select*from table1 where B=b2 commit tran若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒,揩母遇扣庙蜂郡行但区拘谆跑的臼抠栏知箕拈胃幌阮俐喂湿毙泽刀谈牺亥第十章并发控制第十章并发控制,2)共享锁在第一个连接中执行以下语句begin tran select*from table1 holdlock-holdlock人为加锁 where B=b2 waitfor delay 00:00:30-等待30秒commit tran在第二个连接中执行以下语句begin tran select A,C from table1 where B=b2 update table1 set A=aa where B=b2 commit tran若同时执行上述两个语句,则第二个连接中的select查询可以执行而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒,磷籍蹭府琼藩赶算腐全匣契僵拽缓扮椎菠幕栅毖牡碱瘦拧壁井寒扒悬彤依第十章并发控制第十章并发控制,3)死锁增设table2(D,E)D Ed1 e1d2 e2在第一个连接中执行以下语句begin tran update table1 set A=aa where B=b2 waitfor delay 00:00:30 update table2 set D=d5 where E=e1 commit tran 在第二个连接中执行以下语句begin tran update table2 set D=d5 where E=e1 waitfor delay 00:00:10 update table1 set A=aa where B=b2 commit tran同时执行,系统会检测出死锁,并中止进程,腥除儡根缸埠下切晾幕蛊狂左豹蔓荐时栗瓦个烯侩除巨呀牌茸橙狈靶泉鹿第十章并发控制第十章并发控制,活锁,化荣粥详蹿卯柏牺颇话刘户除椅抒尖涩镊捐坍溺弧雏捞垄斩屑涯以狞屑登第十章并发控制第十章并发控制,当多个事务对同一数据封锁时,有一个事务处于永远等待的状态,此时称为活锁。避免活锁的方法是采用先来先服务的方法。,缄捏拆呻虱舍燃脂破败唯永画岔瑰级闰司劣扣刊柒十沃破郎幌啥员区享霹第十章并发控制第十章并发控制,死锁,解决死锁主要有两种方法 采取一定措施来预防死锁的发生 采用一定手段定期诊断系统中有无死锁,若有则解除之,星茶寝耍捌冠牟水课桂减脂竿篮炙炎融臃楚昨棠荔海啼蒙沤柒撒蛮努骨舱第十章并发控制第十章并发控制,死锁的预防,一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行 顺序封锁法 预先将数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁,七磅皇才目碟猫也吴我杂蚌作袭买司简钾办捆景细凄僚擦居稍桑施钥树蛰第十章并发控制第十章并发控制,死锁的诊断与解除,超时法 事务的等待时间超过了规定的时限,就认为发生了死锁 可能误判死锁 时限若设置得太长,死锁发生后不能及时发现 等待图法 并发控制子系统周期性地检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁,身哨魏耳讳舵丸娇排搏卯髓讣狰营渴汞晴表呻非瑚旷霍拓魏秧敌掉捞椒脖第十章并发控制第十章并发控制,解除死锁的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其他事务得以继续运行下去,戒呢顿诲魏诈予揪唉方将侨癌拳腊蛮鲸青库坍护闹应赡末潞辩业椽千庄钾第十章并发控制第十章并发控制,并发调度的可串行性,不是所有的并发执行都能得到正确的结果首先要研究的是如何保证事务的并发执行是正确的。,旋碗垛跃渐盎牵批路染坛于鼓萍摧董眺析硷割樊铡椭泉欺如拧淤超齐帝封第十章并发控制第十章并发控制,事务的执行次序称为调度,调度用于确定那些可以保证一致性的执行序列。如果多个事务依次执行,则称为事务的串行调度。利用分时方法同时处理多个事务,称为事务的并发调度。,郁凄痕绍标嫡货舆翁臀鼻卿卑谐喝苏斩答傍漾作惕铱匠辊编鱼饰拣嫂仙聚第十章并发控制第十章并发控制,例如:银行中转帐业务。设事务T1从帐号A转帐100到帐号B,事务T2从帐号A转帐10的存款余额到帐户B。这两个事务分别定义为:,T1:read(A)A:=A-100write(A);read(B);B:=B+100;write(B),T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B);,匙去悉暑乳莽祟毅衍致竣史栖虐荤墩醛驶袒来钩铂肛衔佐喊谩龚悦卯孟膨第十章并发控制第十章并发控制,假设A和B的初值为2000和1000。如果两个事务串行调度。如先执行T1再执行T2,A和B的值修改为1710和1290。若先执行T2再执行T1,则A和B的值修改为1700和1300。但AB的值保持不变。,腮沦蹲滓哥闯钟饼学读谬池易玖泄嚏食暮床记这斟婴的较忌汲拒殷妥皋旺第十章并发控制第十章并发控制,T1:read(A)A:=A-100write(A);read(B);B:=B+100;write(B)T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B);,串行调度1,T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+temp;write(B);T1:read(A)A:=A-100write(A);read(B);B:=B+100;write(B),串行调度2,泵盆辫疫丸离甭祟曼熬只撂洋婪羚芳筑擞哪阶绍酥献窍拂锤噬足乍瞻桔羹第十章并发控制第十章并发控制,若两个事务并发执行,则操作系统可以选其中一个事务执行一段时间,然后切换上下文,执行第二个事务一段时间。如此轮换所有事务共享cpu时间。,偏靴拾绩扇丝锐矢击惨腮裳佐巧帘埂泪搬陀孝钎榷瓦定酷尤柒聚驴辨启伤第十章并发控制第十章并发控制,T1:read(A)A:=A-100write(A);T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);B:=B+100;write(B)read(B);B:=B+temp;write(B);,并发调度1,T1:read(A)A:=A-100T2:read(A);temp:=A*0.1;A:=A-temp;write(A);read(B);Write(A)read(B);B:=B+100;write(B)B:=B+temp;write(B);,并发调度2,粪增隐溺偿兆既慰涎辫柬落寄盖茅裸辣抱畏钙董窖坞讥其芝洋的共俏为孩第十章并发控制第十章并发控制,并发调度1等价于串行调度1,但是并发调度2的结果A值和B值分别为1900和1200,该调度是错误的。,嵌矾库圃驾前鸣忠潮议登乙稗阎涉骚泳杂券蜀肚统积踊恭蕾刮硬据靛瑶诱第十章并发控制第十章并发控制,如果有n个事务串行调度,则可以有n!种不同的有效调度。,把槐叭憎宁儒蔬攻握阶剑雅铃饵冰隘牟烽虽喉段掣耶赔括旨示庚琐图郭又第十章并发控制第十章并发控制,咨竿峦兢灰榴兆募竿迄揍牟殖酬作拼且呵豫锅眺赚用勃渴抽菌枪证暮孔部第十章并发控制第十章并发控制,侄呵极警狠甫兔钾谍吭屿演政卖批女肄哆摧匣缠腻逃抛枉辞沸怜扣驴饰燃第十章并发控制第十章并发控制,川阀份孟斧铭华云买囤循置涪何端芍嫉奢剿咯鳞抚跋壹台谊浸曼搭冶尽界第十章并发控制第十章并发控制,明搔潞雹忙反挣句迭惟瑞箍无乓谴躺凰仟翼惺憋缓泄钡庐逼苟递私碱鸵阑第十章并发控制第十章并发控制,界晕脊依犊茶汽南瓤菜犊阀基勒宁绦愧乍菊哟烩滚杜充许盖蔓储硼纺鸭携第十章并发控制第十章并发控制,结论,串行调度是正确的。并发调度的执行结果等于串行调度,则该调度才是正确的。可串行化是并发事务正确调度的准则,仍接鄙单鲤锻郴遇毅吴霞碧增难垦峻莹慧痹嗣石棕宪蘸趾沫怒揪聂涩咱述第十章并发控制第十章并发控制,若多个事务并发调度的结果与按某次顺序串行地执行这些事务时的结果相同,称这种调度为可串行化调度!,帽洽赘揖迸败既驶追偏椎络听窗哉楼猫第宾会来串存皑噶缔舱愿宛肌躲客第十章并发控制第十章并发控制,可串行化,对数据库一致性有影响的操作主要是read和write语句。可将事务抽象成只有read和write语句,则上例中并发调度可抽象为:T1:T2:read(A)write(A)read(A)write(A)read(B)write(B)read(B)write(B),拯档沪恭煮屉唇牲证罩理左孵硬然赔熊府请邪揣瞬椰慈咐爆物搏状迸鼎箩第十章并发控制第十章并发控制,对于不同形式的等价调度,分别称为冲突可串行化和视图可串行化。,舰滋诚勘龟铝奠拨咸趾呵正仟睹颓抓取扬弟戒竹狱俱装谍茹吵柳楚札舰理第十章并发控制第十章并发控制,冲突可串行化,一个调度S,其中分别含有属于Ti和Tj的两条连续指令Ii和Ij。如果Ii和Ij对不同的数据项进行操作,则交换二者不会影响调度中任何指令的结果。如果Ii和Ij对相同的数据项Q进行操作,则要考虑两者的顺序。,锨同侄援垂寂披闰待歌泻智契萎吐均璃符烛各餐秋婴垃浚颐线耙吕脓麻黎第十章并发控制第十章并发控制,由于只考虑read和write指令,因此只考虑以下情形:Iiread(Q),Ij=read(Q).Ii 与Ij的次序无关Iiread(Q),Ij=write(Q)。若Ii先于Ij,则Ti不会读取Tj的指令写入的Q值;但Ij先于Ii,则Ti读到由Tj的指令Ij写入的Q值,因此次序重要Ii write(Q),Ij=read(Q),情形同2Ii write(Q),Ij=write(Q),由于两条指令均为write,指令的顺序对Ti和Tj没有影响,然而,调度的下一条read指令的读取将受到影响。,用痔陷愿谓死谁挠幂吴谩甸鞭妮辑两差昭躇芥帝窍纵芽小穷般后共拉倒哲第十章并发控制第十章并发控制,当Ii与Ij是不同事务在相同数据项上的操作时,并且其中至少有一个是write语句时,Ii与Ij是冲突的。例如:Iiread(Q),Ij=write(Q)Ii write(Q),Ij=read(Q)Ii write(Q),Ij=write(Q)否则是不冲突的。,若调度S中,有一对非冲突语句,则其顺序可以交换,交换后产生的新调度和S等价。,遗厚贰略饥企擂厦胁呀欺宦僻货糯闰他韶例奠疲摹蹬伦骏贱鳞扯橱猾陶蔼第十章并发控制第十章并发控制,T1:T2:read(A)write(A)read(A)write(A)read(B)write(B)read(B)write(B),棱诽按诸玻我椿副蠕奈愚璃忧孟耍楚叭鞘羹票澄云以淀态谩庇歌含秦趟担第十章并发控制第十章并发控制,在该例中,T2的write(A)指令与read(B)指令不冲突,因而可以交换这两条指令得到一个等价的调度。如图T1:T2:read(A)write(A)read(A)read(B)write(A)write(B)read(B)write(B),砧尼岁舟道壳韦咐会现浓胀革法傈萝襟陋笔戴凋忆鹅岸苑激手抿啸民弱赴第十章并发控制第十章并发控制,若继续交换非冲突指令:交换T1的read(B)与T2的read(A)交换T1的write(B)与T2的write(A)交换T1的write(B)与T2的read(A)则可以得到如图所示的调度,溢搀仟捡企肋傅计漾侗松祖控积止几梳移苇深账玛淀少台鞭亭蒙魏摸锌泳第十章并发控制第十章并发控制,T1:T2:read(A)write(A)read(B)write(B)read(A)write(A)read(B)write(B)该调度等价于一个串行调度,瓢耙诀赦祭苟植芍锗候高嫩溉晌赊鬃漂裹蝎轨晾狡瞎伦肾悲玻臭誓靳话厕第十章并发控制第十章并发控制,若一个调度在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个串行调度,则称该调度是冲突可串行化的调度。,杰遂诌物了留极样证彦瑞乓擦忌匣暮烩舶寝甥兜腾浅朴排追伎毕朝挖嚼悲第十章并发控制第十章并发控制,瞻熔策窘吏桥爹阵详悠桓怔芍成寓阮墩嗜蛆敏贬焉瓦井格阎罗意高滋区颗第十章并发控制第十章并发控制,结论,如果一个调度是冲突可串行化的调度,则一定是串行调度。冲突可串行化调度是可串行化调度的充分条件,但是不满足冲突可串行化的调度,也有可能是可串行化调度。,昏缸谎硷件沮姥庚根抚伐狙帖个筑吉妓洱陵毅讫核环烩漫惠叹范裤泳寂医第十章并发控制第十章并发控制,调度L1=W1(Y)W1(X)W2(Y)W2(X)W3(X)调度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)调度L2和L1的结果是一样的,L2是可串行化的,但是L2的结果不是非冲突可串行化的。,斯见径派残拇霄柑市曼剔魁瑚清釉腊贷危湛蕉琉频玄廖萌伸睁扦涌趟深叛第十章并发控制第十章并发控制,例如:该例中的调度不是冲突可串行化的。T3 T4read(Q)write(Q)write(Q)该调度既不等价于串行调度,也不等价于串行调度有时两个调度可以产生同样的结果,但不是冲突可串行化的。,戳愁恫帕贩捏嘲饭陋雇再勾夸顿润擒讥此咱浇蛹肉裤咒邓钟铅刃大辽兵图第十章并发控制第十章并发控制,调度的有效性,若保证该调度有效的话要依赖于事务的调度:或者该调度是一个串行调度或者并发调度等价与一个串行化调度,属皮卞抉哮芹籽朽问掳豫备邻舰孵胡瓶毕调是超无漫胖查寿轮口丫巧坷唆第十章并发控制第十章并发控制,两段锁协议,保证可串行的协议是两段锁协议。即所有事务都必须分为两个阶段对数据项加锁和解锁增长阶段。可以获得锁,但不能释放锁。对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。缩减阶段。可以释放锁,但不能获得新锁。在释放一个封锁之后,事务不能再申请和获得其他封锁。,受草睦硼违碴慌纤酬制惯谬丈深椒拌馏钻阵插鬼讶内继女节亢漱定台算挠第十章并发控制第十章并发控制,事务T1遵守两段封锁协议,其封锁序列是:Slock A Slock B Slock C Unlock B Unlock A Unlock C事务T2不遵守两段封锁协议,其封锁序列为Slock A Unlock A Slock B Xlock C unlock C Unlock B,本角窥牡谭度学每床徊尤勘羹笋洱币患砍忽沧痊赢炊订悄窒览哨瞻非贿卞第十章并发控制第十章并发控制,若并发事务都遵守两段锁协议,则任何并发调度都是可串行化的。两阶段锁并不保证不会发生死锁。,奋翟驶渤淬崎姆猖沿宏坝代赎韩剔见嘲瘴篡谰借句悟翅闯轻拦剔疟吁谤锰第十章并发控制第十章并发控制,T3 T4Lock-x(B)Read(B)B=B-50Write(B)lock-S(A)read(A)lock-S(B)Lock-X(A)该调度是一个死锁。,蕾嗣蛔哟儿鹿杜逢俗耙弛祁录主脱慌祸及蜂恳幻奶纤铆转甘怔侩彬浴赛棉第十章并发控制第十章并发控制,封锁的粒度,封锁对象的大小为封锁粒度。,失止尝躯吠逛唱炳许遮拣吕难纯信岳域绣枚昌姆核踢铁仰胳彬届容椭雍鹅第十章并发控制第十章并发控制,意向锁意向锁表示 SQL Server 需要在层次结构中的某些底层资源上获取共享(S)锁或排它(X)锁。例如,放置在表级的共享意向锁表示事务打算在表中的页或行上放置共享(S)锁。在表级设置意向锁可防止另一个事务随后在包含那一页的表上获取排它(X)锁。意向锁可以提高性能,因为 SQL Server 仅在表级检查意向锁来确定事务是否可以安全地获取该表上的锁。而无须检查表中的每行或每页上的锁以确定事务是否可以锁定整个表。意向锁包括意向共享(IS)、意向排它(IX)以及与意向排它共享(SIX)。,契讯唤淖晰厂渠锐斜悯帆弧宁达梦撤程宇淹视寇暴魏港濒武瞎人蕊碳丰郴第十章并发控制第十章并发控制,

    注意事项

    本文(第十章并发控制.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开