第十一章并发控制.ppt

上传人:sccc 文档编号:5134443 上传时间:2023-06-07 格式:PPT 页数:38 大小:192KB
返回 下载 相关 举报
第十一章并发控制.ppt_第1页
第1页 / 共38页
第十一章并发控制.ppt_第2页
第2页 / 共38页
第十一章并发控制.ppt_第3页
第3页 / 共38页
第十一章并发控制.ppt_第4页
第4页 / 共38页
第十一章并发控制.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第十一章并发控制.ppt》由会员分享,可在线阅读,更多相关《第十一章并发控制.ppt(38页珍藏版)》请在三一办公上搜索。

1、第十一章 并发控制,刹拦辖周腋獭均逻鄂翠破声蟹胶捡徘碟训俏躯睛众烯恳馆卿汞胺仆琳邹肌第十一章 并发控制第十一章 并发控制,教学目的:理解并发操作的概念,一级并发操作带来的问题 并发控制的主要技术是封锁,理解封锁协议,以及执行封锁协议会带来什么问题,如何解决?理解并发调度,并发调度的正确性。重点难点:三级封锁协议和两段锁协议教学方法:多媒体教学教学课时:4课时,秤锦桐桓拽摸常纬勃众钳藤纲衙氟键钮杆垮侩纱猜乳都悠樊住著绣爽瑚菠第十一章 并发控制第十一章 并发控制,11.1 并发控制,数据库是一个共享资源,可供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。例如:银行数据库系统、

2、机票订票数据库系统等。并发控制的产生是由于共享的要求,即多个用户程序并发存取同一数据。并发控制单位是事务。,在单处理机系统中,事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行。这种并行执行方法称为交叉并发方式(Interleaved Concurrency)。虽然单处理机系统中的并行事务并没有真正的并行运行,但是减少了处理机的空闲时间,提高了系统的效率。在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。这种并行执行方式称为同时并发方式(Simultaneous concurrency)。本章讨论的数据库系统并发控制技术是以单处理机

3、系统为基础的。,探仪炊策集叫粒跺鸯边喉二召尸保总旺游哈愧趋扩行幸笺瘫兽汪凋滦弃燃第十一章 并发控制第十一章 并发控制,当多个用户并发地存取数据库数据时,就可能会产生多个事务同时存取同一数据的情况。若对并发操作不加控制,就可能会导致读和写不正确的数据,破坏数据库的一致性。并发控制的核心问题是在保证数据库一致性的前提下最大限度地提高并发度。,缓验项放贬圾垒哨吐故斯嗜致返悄尖绵松泛董臻气腮唱翘关厨廷热腥牲线第十一章 并发控制第十一章 并发控制,例:考虑飞机订票系统中的一个活动序列:(1)甲售票点读出某航班的机票余额=16;(2)乙售票点读出同一航班的机票余额也为16;(3)甲售票点卖出一张机票,修改

4、余额为15,并把A写回数据库;(4)乙售票点也卖出一张机票,也修改余额为15,并把A写回数据库。,甲:read(A);乙:read(A);甲:A:=A 1;乙:A:=A 1;甲:write(A);乙:write(A);,结果卖出了两张票,数据库中机票余额只减少1。原因是甲乙售票过程是交叉进行的。解决的办法是要把甲乙售票点的操作放在两个事务中,一个执行完了才能执行另一个。,测俺横劲柯说弓蜀成坍才庄麓络书钦岸抒羞婉葛炕别瓮等屋蝎蔬甜庭冠聚第十一章 并发控制第十一章 并发控制,事务如果不加控制地并发执行,会产生下列三个问题:丢失修改(lost update)读脏数据(dirty read)读值不可复

5、现(unrepeatable read),多挝掂娘竣沉困飞袭欣柬蔼涪铰碰淋棘窄慰寇阁修破忙耍躺祷卓兽含疆继第十一章 并发控制第十一章 并发控制,(1)丢失更新:指事务T1与事务T2从数据库中读入同一数据并修改,事务T2的提交结果破坏了事务T1提交的结果,导致事务T1的修改被丢失。,扑奔单送捅瞪傲蓬偶市罚茫地陋不鸡评唱静暂椒它墩骄词扦渺河症墩亲捞第十一章 并发控制第十一章 并发控制,(2)读值不可重现指事务T1读取数据后,事务T2执行了更新操作,某种原因使用户重新查看事务T1,这时事务T1使用的是事务T2修改后的数据,造成了数据的不一致性。,在一事务范围内,两个相同查询将返回不同数据。由于查询注

6、意到其他提交事务的修改而引起的。事务T1读取某数据,事务T2对其做了修改(得到与前一次不同的值)、删除(记录消失)、插入(多了记录)。其中删除和插入的不可重复读称为幻影(Phanton Row)现象。,峙氮狸邑臣商黔磋结匪槽叮滦融猜匡赃酶藩泵啼揪督傲逐举阵章躬肾豆佩第十一章 并发控制第十一章 并发控制,(3)读“脏”数据指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,事务T1由于某种原因被撤消,这时事务T1已修改过的数据恢复原值,事务T2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。,为什么出现以上三种问题呢?原因是:并发操作破坏了事务的隔离性,即没有对

7、并发事务进行控制,哪个事务申请了就被执行了。,咬亦荷铝荆耳窖易巩鬃斯情苍道泵茶讯穿踢册址仕删杆底际褥钨茅茹画肌第十一章 并发控制第十一章 并发控制,11.2 并行控制的技术封锁,为了避免并发事务引起操作的冲突,DBMS提供了对数据进行封锁的管理机制。封锁是实现并发控制的一个非常重要的技术。封锁:所谓封锁就是事物T在对某个数据对象(表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。1、加锁和解锁加锁(lock):当一个事务访问数据库中的某个数据单元时,要先对被访问的数据单元加锁。解锁(unlock):事

8、务访问结束后释放锁。,维浮名踩损斩般蹿慢确谤汪掐苞这少描镊涉装玖铸肥漱同欠艾软烤廖知摸第十一章 并发控制第十一章 并发控制,2、封锁的类型通常设置的两种基本类型的锁:独占锁(X锁,eXclusive lock,写锁,排它锁):独占型封锁是指如果事务T对数据A实施了X封锁,则只允许T读取和修改A,其他事务不能再对A加任何类型的锁,要等到事务T解除X封锁后,才能获准对A数据进行封锁。共享锁(S锁,Shared lock,读锁):共享型封锁是指如果事务T对数据R加上S封锁,则事务T可以读R但不能修改R,其他事务对数据R的X封锁便不能成功,而对数据R的S封锁请求可以成功。这样其他事务可以读取R但不能修

9、改R,直到事务T释放S封锁。,因此,如果一个数据单元已经有了一个共享锁,只能对它再附加共享锁。假如它有一个独占锁,不能再对它附加任何锁。,咐透凡奏浊疫卒汰舰胳磁锹碘趴夹负饮物似性刁棺胡衍蔷儿俞宇团次兽牢第十一章 并发控制第十一章 并发控制,图11.3 两种锁的相容矩阵,T1,T2,独占锁 共享锁,独占锁共享锁,NO NONO YES,YES=相容的请求 NO=不相容的请求,纲校最柳高识耽吵阴威净堪铲辰痪酉妈具奠慑拥偷边隋祸辱杖跌皋芝檄甚第十一章 并发控制第十一章 并发控制,X锁和S锁的区别:,席文噬钵骸喘瓢等好芭态匹缮廖邑真秋馏跃豺言镊件喀挠锨锤愤倾偷自高第十一章 并发控制第十一章 并发控制,

10、3、封锁协议所谓封锁协议(locking protocal)就是描述何时申请、持锁时间、何时释放的封锁规则。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。三级封锁协议是其中最重要的一种,它在不同级别上分别解决了丢失修改、不可重复读和读“脏”数据等不一致问题。不同的封锁协议达到的系统不一致级别是不同的。由高到低是Serializable、Repeatable read、Read commit、Read uncommited。,矩伶殖浪藩镊虽肖酣拳跺日锗嘘骆铭瞩脾寐镀遍傀理锦乳吨具能罪泻寇咨第十一章 并发控制第十一章 并发控制,一级封锁协议:事务在修改数据(读不加锁)之前先对其加X锁,直到

11、事务结束。一级封锁协议可以防止丢失更新。,戎针店捧缘衬节冬仅垛区蔷岿壁企叭嚣匡矣物构僧骗济袜瘴禄余踪来网渐第十一章 并发控制第十一章 并发控制,一级封锁协议不能解决不可重复读和读“脏”数据的问题。不可重复读 读“脏”数据,读数据不加锁,所以成功,鸡幅延誊捐闰脯块元王龟晶汤晦邓样菱给卒攀赋蚤猩极颁及柔窝汰赶功镊第十一章 并发控制第十一章 并发控制,二级封锁协议:在一级封锁协议的基础上,在事务读数据之前先对其加S锁,读完后即可释放。二级封锁协议可以防止读“脏”数据。,读的数据时提交之后的数据,高桥妇喉道戮皇透蛇芋沼中蹭叶丛辰载睁坯登莲浆姓吭影迁碧催台夹垄速第十一章 并发控制第十一章 并发控制,二级

12、封锁协议不能解决不可重复读的问题。,赃姥酝席羌摔幼航辈汕颠借蔗葛扭腐她野瓣氛辕蔷租涩喻楼俩胃嫁欠国扔第十一章 并发控制第十一章 并发控制,三级封锁协议:在一级封锁协议的基础上,在事务读数据之前先对其加S锁,直到事务结束。二级封锁协议可以防止不可重读,罕库蔑蹄耐溜割诵浇禁筑禾煤诽容涨铃逸夺拨麦谱昂卖宽栋隋晒曾傅煞打第十一章 并发控制第十一章 并发控制,总结不同级别的封锁协议:,膜劳枝睫购茅拎恋薪碴藐外弛潭蔑赖吴颤隐绽眯云褂逊摸览犊挎笺坷姜肚第十一章 并发控制第十一章 并发控制,11.3 活锁和死锁,(1)活锁概念:是指某个事务永远处于等待状态,得不到执行的现象。例:如果事务T1封锁了数据对象R后

13、,事务T2也请求封锁R,于是T2等待。接着T3也请求封锁R。T1释放R上的锁后,系统首先批准了T3的请求,T2只有继续等待。接着T4也请求了封锁R,T3释放R上的锁后,系统又批准了T4的请求,T2有可能就这样永远等待下去。这就是活锁。避免活锁的方法:采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对这些事务排队,该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。,裁其透涅划暖容蛙材志嫌壤砷怀岂液拣银吝胶榜袋踏兵脂囤撒已味产挚臼第十一章 并发控制第十一章 并发控制,(2)死锁概念:有两个或多个事务同时处于等待状态,每个事务都在等待其中一个事务释放

14、锁才可继续执行,结果任何一个事务都无法执行,这种现象叫做死锁。,例:如果事务T1封锁了数据A,事务T2封锁了数据B。之后T1又申请封锁数据B,因T2已封锁了B,于是T1等待T2释放B上的锁。接着T2又申请封锁数据A,因T1已封锁了A,T2也只能等待T1释放A上的锁,这样就出现了T1等待T2,而T2有等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。,又例:218页图7-11,T1独占资源R1,T2独占资源R2,T3独占资源R3,现在T1等待资源R2,T2等待资源R3,T3等待资源R1,R2,形成了事务间的循环等待关系,每个事务都无法继续执行,系统进入死锁状态。,网陕闲结忆扬蹿丽零造杯拜

15、砰屠丝固腊拴窝峰民拜耶授滦药号乌轧癣稀耙第十一章 并发控制第十一章 并发控制,死锁的预防:保证系统永远不进入死锁状态。预防死锁的方法较多,如:一次封锁法:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。但这样做,扩大封锁范围,降低了并发度。顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实现封锁。,死锁的诊断超时法:如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。等待图法:事务等待图是一个有向图G=(T,U),T为结点的集合,每个结点表示正运行的事务;U为边的集合,每条边表示事务等待的情况。若 T1等待 T2,则T1,T2之间

16、有一条有向边,从 T1 指向 T2。如果发现图中存在回路,则表示系统中出现了死锁。如图11.6。,妹历湛调牟急得吓传硬庐涪括烽税胀椅段题谁均屁沧迷肥脏搭擦镀硼得沽第十一章 并发控制第十一章 并发控制,死锁的解除 发现死锁后,靠事务本身无法打破死锁,必须由DBMS干预。DBMS对死锁一般作下列处理:选择一个处理死锁代价最小的事务,将其撤销,释放其持有锁,其他事务继续。对撤销的事务所执行的数据修改必须加以恢复。被撤销的事务在另一时间再次启动。,桂驾妇是羚醒骗逐溶歉夯兢漓伎讹座潭训猴襟舷鼓滓悉菱寡淆雏没骨袄关第十一章 并发控制第十一章 并发控制,11.4 并发操作的调度,DBMS对并发事务不同的调度

17、可能会产生不同的结果,那么什么样的调度才是正确的呢?一个事务在运行过程中没有其他事务在同时运行(即不受其它事务干扰),该结果是正确的。将所有事务串行起来的调度策略一定是正确的。不同的串行调度会有不同的结果,但不会改变数据库的一致性,可接受。若要n个事务并行执行是正确的,当且仅当其结果与按某一次串行地执行它们时的结果相同。这一并行调度策略称为可串行化(serializable)的调度。可串行化是并行事务正确性的唯一准则。,一煎忍巾挎键依抡贤臀哩笔季拾蓉茁叫批釜桑少稚扒狱诡岂踞祖贵澜喜冯第十一章 并发控制第十一章 并发控制,1、不同的调度顺序,结果不同 假设初始值A=B=2,A=3B=4,B=3A

18、=4,禹砒黍欠薯土厚影霉傻诅鹰态报卢肥粉懒唯霜含窄地衬柑厉染酮孕敢严弦第十一章 并发控制第十一章 并发控制,2、并行调度,A=3B=3,A=3B=4,事务T1T2,不可串行化调度 可串行化调度,结论:串行调度是一致性调度,而非串行化调度有可能产生不一致。因此,希望能够找到那些等价于串行调度的并发调度,以保证调度的一致性。同一事务组的几个可串行调度,其结果未必相同。与串行调度等价的调度,称之为可串行化调度。,燃掇劣狼圃烛谚原鞭隐嘶羊铱栏野洪饺娘辽蔗并晶倔喊迁贸申蚜录潍窗排第十一章 并发控制第十一章 并发控制,保证并行调度可串行性的封锁协议两段式锁协议两段锁协议:是指所有事务必须分两个阶段对数据项

19、加锁和解锁。在对任何数据进行读写操作之前,首先要申请并获得对该数据的封锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁。,11.5 两段锁协议,所谓”两段”锁的含义是,事务分为两个阶段:第一阶段是获得封锁(扩展阶段)。这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段是释放封锁(收缩阶段)。在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。,徊纳酣粟瘫蔗澡宁哺孰帅抵前井暑启蔓媳绢孕矿锰旬楞详彬苗痰产雪陶煮第十一章 并发控制第十一章 并发控制,例:事务T1遵守两段锁协议,其封锁序列如下图:,又例:事务T2不遵守两段锁协议,其封锁序列是

20、:slock Aunlock A slock B unlock Bslock Cunlock C,可以证明,若并发控制的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。但需要说明的是:事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。如下张幻灯片,圈耕挚筛蒋理青褪瓦倔镶垮褐灯钻项再谊蕴退惦爬锦赡古茎抚出氏唐阜盒第十一章 并发控制第十一章 并发控制,不遵守两段锁协议,遵守两段锁协议,晤侠诲情尖麻秉瘪昂油翘告刁忘撒邮罐缺问弯赐俯慕匝鼓垮麻准圈非摆杜第十一章 并发控制第十一章 并发控制,注意:两段锁协议和防止死锁的一次封锁法的异同之处。一次封锁法要求每个事务必须一次

21、将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁法遵守两段锁协议;但两段锁协议并不是要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务有可能发生死锁。例:p302 图11.9,孝拍掘持虐粳韩革值投寞姿式柒毫绦柬幌显的活方荔残崖陵银疫宝台计疾第十一章 并发控制第十一章 并发控制,课堂练习:此并发操作出现什么问题?应如何修改?,该操作丢失修改。该操作的第步中,事务T1应该申请X锁。,咀育轩暮挣妄鼎柯甄敦络锐涅瓷卫忽牛足拜苹舀唇将挖沉滤侧臂证皿雪馁第十一章 并发控制第十一章 并发控制,11.6 封锁的粒度封锁的对象:属性、元组、关系、索引、数据库、物理页、数据块。封锁粒

22、度越大,并发度越小,系统开销越小。从用户的角度看,如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁(Multiple Granularity Locking)。一般情况下,需要处理大量元组的事务可以用关系作为封锁粒度;需要处理多个关系的大量元组的事务可以以数据库作为封锁粒度;一个处理少量元组的事务通常用元组作为封锁粒度。,娠庐齿窘隔唐瓤呐费角屿疡桌宵哆玛埔市少潘桩拱州踪末司瞳田鬃朵夷狄第十一章 并发控制第十一章 并发控制,SQL Server里的锁定动作是自动的,它由一个内部的锁管理器进程实现。锁管理器负责决定锁类型(共享锁,独占锁等)和锁粒度(行,

23、页和表等)。例如,create index语句会锁定整个表,而update语句会锁定一行或多行或整个表。,柳血盛唾罪厘漆恿警璃篆彼蓄膜马芹颁停絮淄僵津听唤天俱炸偶优伙勉蛋第十一章 并发控制第十一章 并发控制,行锁(row-level lock):是指锁定一个数据页或索引页中的一行数据。页锁(page lock):用于锁定一个页(8KB的数据页或索引页信息)。表锁(table lock):用于锁定包含数据与索引的整个表。用于表级别的锁定。一个表通常包含多个页。,1、SQL Server提供不同级别的物理锁,注意:SQL Server在可能情况下尽量使用页锁,而不使用表锁,以减少阻塞。,浑宛镇磐耳

24、条斜皖频嫁迈索妒等犬拜瞻趋荷攫后琵据缅赏缓肯膛错市瞳尧第十一章 并发控制第十一章 并发控制,2、SQL Server锁类型,锁管理器根据事务类型(如select,insert,delete等)来选择锁的类型。锁管理器使用的各种类型的锁如下:共享锁(shared):用于读事务(如select语句),可以对行、页和表使用共享锁,允许其他事务读。完成后即释放;更新锁(update):用于更新操作(如Update、Delete语句),可以对行、页和表使用更新锁。更新锁是先使用共享锁读数据,而后实际修改时升级为独占锁。更新锁同时只能有一个事务拥有。,炸洲穷片彝孔锯埔制檄义核虏惺勿串把被祟淀园丽船鼻巩爬芥

25、洞行菲艾荆第十一章 并发控制第十一章 并发控制,独占锁(execusive):用于写事务(如Insert、Update、Delete语句),实际修改时使用;意向锁(intent):说明其下级结点正在被加锁。模式锁(schema):分为模式静态锁和模式修改锁。当SQL Server禁止修改模式时,使用模式静态锁;实际修改表或索引时,使用模式修改锁。,靖起驶旬狐光铰嚼肚粉缄泻撅帽慑祥心篷撇忘黄裁乃铀厄冠斟套两庙羞脑第十一章 并发控制第十一章 并发控制,本章小结,1、数据库的重要特征是它能为多个用户提供数据共享。数据库管理系统必须提供并发控制机制来协调并发用户的并发操作。2、并发操作带来的数据不一致性:丢失更新、不可重复读、读“脏”数据3、解决 这三类问题的主要技术是封锁。封锁的类型和三级协议。封锁之后会带来哪些新的问题呢?死锁和活锁。4、并发控制机制调度并发事务操作是否正确的判别准则是可串行性,两段锁协议是可串行化调度的充分条件,但不是必要条件。5、封锁的粒度。,硫猩彦睬裁这轴搽攻阴峪赡遮落学掺芒矣糙诗护绦装搪左押派谎谷玫毫恰第十一章 并发控制第十一章 并发控制,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号