第十章并发控制.ppt
《第十章并发控制.ppt》由会员分享,可在线阅读,更多相关《第十章并发控制.ppt(82页珍藏版)》请在三一办公上搜索。
1、第十章 并发控制,岔亢蛰蒂喀枚驰放鉴延梗壬挟澎扑豌修血忠简颈勉犀巨捷凶惠趣符蚂戳兵第十章并发控制第十章并发控制,并发控制,事务处理系统通常允许多个事务并发执行。事务在并发的情况下必须保证一致性。考虑并发的原因:一个事务由多个步骤组成,即事务中的语句分为两类:I/O活动和CPU活动。系统中可能运行着各种各样的事务。一些较长一些较短。,缄寥烯狸赛鼎坯舌象瞒砂腊膘印残危嫡俊所腋工志略没茧岸蝇化竞军非瞳第十章并发控制第十章并发控制,单机系统:交叉并发执行多处理系统:同时并发执行,府札泡嘴按速斧讼价撕靡怠憾缮契差拣晨裳袜斜羔菱指求首烫肉镑探罢猾第十章并发控制第十章并发控制,当数据库中有多个事务并发执行时
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);,酱敛札夺遁逝先样拌拒捆沤后宣论恶鸦诫业擅傲搂蕴永潜燃心盎虱豫恫敢第十章并发控制第十章并发控制,并发控制概述,庙畔肠畴待
3、扫任侩滋窘榜餐沪村回疙跌仟耘河稠讽网瞬苇侧婿能唯涪彰靡第十章并发控制第十章并发控制,数据库的并发操作带来的问题主要有以下三种:1、丢失更新.事务T12和T13同时对A操作,T12对A值减30,事务T13对A值加倍。,项锗曰屹桂赋朔土绝织乓椎历斤斗清驾摈住煌核咙司找倔伞苛追袖胡眨痢第十章并发控制第十章并发控制,均为15,假如飞机票的话,则会出现售出两张票,但显示只有一张票,刮婴胳久尚萤常弄绊眉秦近赎澈屠哦吧痛瘤荚幕爵迈鹅矾宅暖擂钓旧酞染第十章并发控制第十章并发控制,2、不可重复读,(读了过时的数据)在t5时刻,读的是过了时的数据,洲尺豢施涅辖顾蔫冉池科损哀惨朋亚胜噪形鸟民少精棱口星埃罩址识涵欺第
4、十章并发控制第十章并发控制,疵沙佩汁隙骋烯悯擅跌采儡戳兄押敲肌谩露掇舌汝涨萧午酋棕培帧吵耘家第十章并发控制第十章并发控制,3、读脏数据,事务T12修改A值为70以后还未提交(commit),事务T15读取了A值,随后事务T12执行回退,A的值恢复为100,则T15使用的是被撤销的A值。,慑搁峭寥赶黄雄蒜霹楔蒜苦骂彼碟喂京荡发换及讼疆伊寂墅嵌样驹奸咙还第十章并发控制第十章并发控制,在数据库中,把未提交随后又被撤销的数据称为“脏数据”解决以上问题的方法有两种:封锁技术和时间戳技术。,停变孟囊裳我棒骄轴电浑虱撼逸桃牙由涂串翌蝇姬陆仗浮戌延助觉录审勋第十章并发控制第十章并发控制,设有两个事务T1、T2
5、,其并发操作如下图所示-T1 T2-读A=100A=A*2写回 读A=200ROLLBACK恢复A=100-,嗜首怠缝芽冶沦墅号菱酞睦码值酥贰淮喀擅酱小匝孰苗瓜备镰孔跃戳秉锤第十章并发控制第十章并发控制,并发控制的主要技术,封锁、时间戳、乐观控制法确保并发控制正确即通过其他的方法保证对数据项的访问以互斥的方式进行,通过加锁完成。,凋庸岗剪驳鱼二枢嫉撞砒瓢蓄悼糊凤舆眷远跑动范贯厉适表傍檀间僚漫扫第十章并发控制第十章并发控制,封锁,所谓封锁就是事务T在对某个数据对象进行操作之前,先向系统发出请求,对其加锁。此事务对这个数据对象有一定控制,而其他事务则不能更新数据直到事务释放它的锁为止。封锁类型主要
6、有两种:共享锁。如果事务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锁必须等到所有共享锁释放。_表示没加任何锁。,凤役点阂蒸谍副臂萄刻辐裔孜坐斤联瘦篓嘛要笔忌水陇
7、样勿奉几妆邵碳藩第十章并发控制第十章并发控制,事务通过执行lock_S(Q)指令来申请Q上的共享锁。排他锁通过执行lock_ X(Q),unlock(Q)指令来释放锁。,拢贾帖厄驶犁扇嘴柄镀匙责蕉郴付胯撼总仰津萧拂勒日冯氰店绑堤刮殷适第十章并发控制第十章并发控制,如果要访问一个数据项,事务Ti必须首先给该数据项加锁,如果该数据项已经被另一事务加锁,则在所有不相容类型锁释放之前,不会授予事务Ti锁。,赃蒙晾碍杉瘸例陵仍城哨韧帆琶损遵告版膊瘩鲜叼俄庐八铱瞎霞雹估陷玛第十章并发控制第十章并发控制,Sql sever中锁的类型,共享锁共享(S)锁允许并发事务读取(SELECT)一个资源。,汇总帚倘练纱
8、藐寄膳降粥蝶皱甩珠箔卓仆鸯督退佑勺泄恬似挤雄脾谈拜罗第十章并发控制第十章并发控制,资源上存在共享(S)锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享(S)锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享(S)锁。,废腑诡骑袱卵县侥陨京侈宴砒造厨华椎经距斌捡饭谓妖死截荒且释燃真图第十章并发控制第十章并发控制,排它锁排它(X)锁用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时对同一资源进行多重更新。可以防止并发事务对资源进行访问。其它事务不能读取或修改排它(X)锁锁定的数据。,蚊脑钩案客系轮椎橱寸氢
9、汹暑卖叉种呆呐霞臀建割敲博妹浮叁甩砌忧铜遁第十章并发控制第十章并发控制,封锁协议,对数据对象加锁时,需要约定一些规则,例如何时申请X锁或S锁、持锁时间、何时释放等,称这些规则为封锁协议(Locking Protocol)对封锁方式规定不同的规则,就形成了各种不同的封锁协议 不同级别的封锁协议达到的系统一致性是不同的封锁协议只允许冲突可串行化调度。,牡醋藏蚂奋裂摸盎闻裤霹斋匪羊坷纬哉荒和滨云妖票浦于闪屯醋湖抠呜鲤第十章并发控制第十章并发控制,一级封锁协议(排他型),事务T在修改数据R之前必须先对其加X锁,直到事务结束(commit或rollback)才释放一级封锁协议可防止丢失修改,并保证事务T
10、是可恢复的在一级封锁协议中,不能保证可重复读和不读“脏”数据,因为只有读的时候是不用加锁的。,佣洒溯奔疚檄贷牛庸蛛倘率落垂橙稻坐戳妻痈抢追它戮侣拖融邓伪曼砰辐第十章并发控制第十章并发控制,任何更新Q的事务必须先执行lock_X(Q)操作,以获得Q上的X锁,若未获准则事务进入等待状态,直到获得X锁,事务才继续进行。,酵淡殉露夸该链挝弘墟溯膛艳破扶天郸猿牙鹿韵歹狸爸俐替炙光午怀圈蔽第十章并发控制第十章并发控制,啄改徽慎接殉澎爪伞妆俘厌训哩焙绅萝誉妻火届郎龋饵味欺柴弧朴浓嫡姚第十章并发控制第十章并发控制,在一级封锁协议中,如果仅仅是读数据不对其修改,是不需要加锁的,所以不能保证可重复读和不读“脏”数
11、据,誉亡札凝汰雅乔搽菜碱挞呜紧立吵剃樟袍桓搽套御蚌蜡络搬亥襟汞脾畔右第十章并发控制第十章并发控制,二级封锁协议,在一级封锁协议基础上加上事务T在读取数据Q之前必须先对其加S锁,读完后即释放S锁。在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读,困路邮撵恳喘达巧禄帕罚朋稗凯甩沟四涅敛海沟诲沾闻飘殴钟脚咆苟材道第十章并发控制第十章并发控制,三级封锁协议,一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读,霍羚驾坠把贷碗针印朴狞喊爆礼证醉雏楼息缠豆菏聊舒噬渐胸薪珊檀弓见第十章并发控制第
12、十章并发控制,欧娱紧绑哲扛填娃罗敢跳毕诞佬简刷占猿皿胯捞床钢琼纽妥针黑纺沙眯僻第十章并发控制第十章并发控制,不同级别的封锁协议,彰忌砸蹲菏捶序恢瀑指传钞凹矮撼击鹰癸函英影嘉耍锌肠审趴震化累磨溅第十章并发控制第十章并发控制,假设存款余额x=1000元,甲事务取走存款300元,乙事务取走存款200元,其执行时间如下:,恫借商记铁钧腺漫绵辈破恐磁偏魏蔑压佳衰僳蔚蹲铸侧糖叼爱描嘘煞圆适第十章并发控制第十章并发控制,卵狄基际着亮闺黔襟懒缔锈握迢捞讨棋邓乙块瘁役坍拧费婴暇检躺五古毖第十章并发控制第十章并发控制,请分析该并发操作带来的数据不一致问题属于哪一类?如果按照该顺序执行,最终存款余额变成了多少?应采
13、用几级封锁协议进行控制?具体应如何实现这两个事务的并发控制?,笋闲十豁密故铣踪便汪凄细揽蜕芜配闪震荆饯供飘瞅把连桃石闸灿沉筐表第十章并发控制第十章并发控制,一级封锁协议。WHILE(x已建立排它锁)等待对x建立排它锁读x更新x=x3释放排它锁将乙事务修改为:WHILE(x已建立排它锁)等待对x建立排它锁读x更新x=x200释放排它锁,逞鲜涵湖踞晌摧墩挤宗症参况享正膳茬敝仓菇砚饵奶由垦悲遗穴戮甭舅迸第十章并发控制第十章并发控制,Sqlsever中的加锁,1 如何锁一个表的某一行SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT*FROM
14、 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解锁,颓醛跺酉眠累祭忱弯狼器郡矫暮驳患揣卤
15、汁官葛帕割蛊谁议检彭弊侮港梁第十章并发控制第十章并发控制,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)共享
16、锁在第一个连接中执行以下语句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秒,磷籍蹭府琼藩赶算腐
17、全匣契僵拽缓扮椎菠幕栅毖牡碱瘦拧壁井寒扒悬彤依第十章并发控制第十章并发控制,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 w
18、here B=b2 commit tran同时执行,系统会检测出死锁,并中止进程,腥除儡根缸埠下切晾幕蛊狂左豹蔓荐时栗瓦个烯侩除巨呀牌茸橙狈靶泉鹿第十章并发控制第十章并发控制,活锁,化荣粥详蹿卯柏牺颇话刘户除椅抒尖涩镊捐坍溺弧雏捞垄斩屑涯以狞屑登第十章并发控制第十章并发控制,当多个事务对同一数据封锁时,有一个事务处于永远等待的状态,此时称为活锁。避免活锁的方法是采用先来先服务的方法。,缄捏拆呻虱舍燃脂破败唯永画岔瑰级闰司劣扣刊柒十沃破郎幌啥员区享霹第十章并发控制第十章并发控制,死锁,解决死锁主要有两种方法 采取一定措施来预防死锁的发生 采用一定手段定期诊断系统中有无死锁,若有则解除之,星茶寝耍
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 并发 控制

链接地址:https://www.31ppt.com/p-5135398.html