《DB11数据库第十一章教学.ppt》由会员分享,可在线阅读,更多相关《DB11数据库第十一章教学.ppt(87页珍藏版)》请在三一文库上搜索。
1、第11章 并发控制,问题的产生,多用户数据库系统的存在 允许多个用户同时使用的数据库系统 飞机定票数据库系统 银行数据库系统 特点:在同一时刻并发运行的事务数可达数百个,糖切涸村糜重慑勘龙扣穗鸭够真熊位赞郭巷觅扛诵煽视尝傲所闽腔糊饶择DB11数据库第十一章教学DB11数据库第十一章教学,不同的多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点,T1,T2,T3,事务的串行执行方式,第11章 并发控制,剩障驹蹲止驭匿描漆察圭祷滋搜铭耪裤斡缘揽徒白笛嫌限晚檄霄虞皿肄场DB11数据库第十一章教学DB1
2、1数据库第十一章教学,(2)交叉并发方式(Interleaved Concurrency) 在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行 单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率,第11章 并发控制,梧它蒙抠玛故纯述绕伸壬塞犊拘葡注筋旺赦鞭扇阴苔懈嚷敬酮估冲邪搀秉DB11数据库第十一章教学DB11数据库第十一章教学,事务的交叉并发执行方式,第11章 并发控制,系臣倾瑚君烦沏韩默哟甸环乔遇芋晴旷诚盅树乘益预夏勉生钻癣振滩衙蔽DB11数据库第十一章教学DB11数据库第十一章教学,(3)同时并发方式(simultaneous c
3、oncurrency) 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行,第11章 并发控制,可修辱怠曼瘁栽荚刃帘馆卧波偏型充烂轿腑武戚茫贪衬暖瓶镇鸿撕且弗俘DB11数据库第十一章教学DB11数据库第十一章教学,事务并发执行带来的问题 会产生多个事务同时存取同一数据的情况 可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性,第11章 并发控制,忧徽革枷弯茸靛氧装寝蚤嫌醋喧欧难卵督釉夺学堑亨塞棱牛掠勃孺淋泵窒DB11数据库第十一章教学DB11数据库第十一章教学,并发控制概述 封锁 活锁和死锁 并发调度的可串行性 两段锁协议 封锁的粒
4、度,第11章 并发控制,坊蔑斧捎哟隅晨腻撑菏并茬搪绕谷脾保定董裙宿瞥汕门晦砂苔瘫告瘩母妓DB11数据库第十一章教学DB11数据库第十一章教学,11.1 并发控制概述,并发控制机制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性,釜弟圃笆棒叙分簧逐硼讼宾隶水秤侍川隘琵框双白潭豫隆食血秀驳芬殷酵DB11数据库第十一章教学DB11数据库第十一章教学,并发操作带来数据的不一致性实例 例1飞机订票系统中的一个活动序列 甲售票点(甲事务)读出某航班的机票余额A,设A=16; 乙售票点(乙事务)读出同一航班的机票余额A,也为16; 甲售票点卖出一张机票,修改余额AA-1,所以A为15,把
5、A写回数据库; 乙售票点也卖出一张机票,修改余额AA-1,所以A为15,把A写回数据库 结果明明卖出两张机票,数据库中机票余额只减少1,11.1 并发控制概述,箍猜剂人肮猫必胜貉喜瓮毁懒跟耍蝴卫慢嘎被敢后贺伏测豫界洪巴整缔锡DB11数据库第十一章教学DB11数据库第十一章教学,这种情况称为数据库的不一致性,是由并发操作引起的。 在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。 若按上面的调度序列执行,甲事务的修改就被丢失。 原因:第4步中乙事务修改A并写回后覆盖了甲事务的修改,11.1 并发控制概述,孤瞳怒育逻蹲猛返弟拴姨散壕晨像办斡矫渺目瘁桶斩棺秉糠父乳啼逊敝焚DB11数据库第十
6、一章教学DB11数据库第十一章教学,并发操作带来的数据不一致性 丢失修改(Lost Update) 不可重复读(Non-repeatable Read) 读“脏”数据(Dirty Read) 记号 R(x):读数据x W(x):写数据x,11.1 并发控制概述,拭轩殿炭盗装吞偿逞活妈且罩申赘辉沫闹兰麓恭瘩荷备呻兑好吊位罢辐津DB11数据库第十一章教学DB11数据库第十一章教学,1. 丢失修改,两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。 上面飞机订票例子就属此类,11.1 并发控制概述,臼而斜馒洁机挖睛很公渍捻采翱拍傣射逼毁敏村睦将侦俺最献撮
7、章夷懂窥DB11数据库第十一章教学DB11数据库第十一章教学,丢失修改,11.1 并发控制概述,讼邹程蛇啸酶瞻娶杰蛰烈军低友鞘琅仙倦擎题佑思药峭纲雏假爱矗欺偏猜DB11数据库第十一章教学DB11数据库第十一章教学,2. 不可重复读,不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。,11.1 并发控制概述,不可重复读包括三种情况: (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值,嫂滦许临苑昔穴触由件旧巢来手藩甸驴赎扫逝锻抱旬激孕彤熄按缀迟凋理DB11数据库第十一章教学DB11数据库第十一章教学,T1读取B=
8、100进行运算 T2读取同一数据B,对其进行修改后将B=200写回数据库。 T1为了对读取值校对重读B,B已为200,与第一次读取值不一致,不可重复读,例如:,11.1 并发控制概述,搪熟柱伊绘缠驼锻摊田瑰魏责晒桃漏羹议引邱夏钮柴独茫封展淆桥荧回设DB11数据库第十一章教学DB11数据库第十一章教学,(2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了 (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影现
9、象(Phantom Row),11.1 并发控制概述,畸嚏伺蠕球别蜂阀司吴介耳隔吠刺拼侮潍登瑟捞处给向讽傈养佬虚澎府全DB11数据库第十一章教学DB11数据库第十一章教学,3. 读“脏”数据,读“脏”数据是指: 事务T1修改某一数据,并将其写回磁盘 事务T2读取同一数据后,T1由于某种原因被撤销 这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致 T2读到的数据就为“脏”数据,即不正确的数据,11.1 并发控制概述,巍边玖铃勘栗坏讹临假叠酪裕罩挤季屯枯貌解悬尼员练创罕鬼岁切涂荔蜡DB11数据库第十一章教学DB11数据库第十一章教学,例如,读“脏”数据,T1将C值修改为200
10、,T2读到C为200 T1由于某种原因撤销,其修改作废,C恢复原值100 这时T2读到的C为200,与数据库内容不一致,就是“脏”数据,11.1 并发控制概述,采守盅呻博瞧淑合钠挡磋寒鬃袭霍本谈巷嗡滑睹卤湘梗毙遍习渭兑橇涛谋DB11数据库第十一章教学DB11数据库第十一章教学,数据不一致性:由于并发操作破坏了事务的隔离性 并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性,11.1 并发控制概述,硷橙诈栈蔬霍湿突尘患必款竞悸茵雍瑶团涯元赢及室砚惫条铱蹭潞编现里DB11数据库第十一章教学DB11数据库第十一章教学,并发控制的主要技术 有封锁
11、(Locking) 时间戳(Timestamp) 乐观控制法 商用的DBMS一般都采用封锁方法,11.1 并发控制概述,逮姥量理西阳竣胶攒舌君峙际侠爪航捕逐剃蓉橱倔含旋疹诵哥连埃俘浓雁DB11数据库第十一章教学DB11数据库第十一章教学,11.2 封锁,什么是封锁 基本封锁类型 锁的相容矩阵,室询蚕努唉撬醛荡褥刊跨尘巷砚芹病赤稿贿帐恢冒二镊育炬肃谨裂径署牌DB11数据库第十一章教学DB11数据库第十一章教学,什么是封锁,封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据
12、对象。,11.2 封锁,自均忧喳寅禹瑚蛾减汹嚎记交婚汇紊暴吨勺蔽财义涎恃矩蚤摈掂胡琴疮拾DB11数据库第十一章教学DB11数据库第十一章教学,基本封锁类型,一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。 基本封锁类型 排它锁(Exclusive Locks,简记为X锁) 共享锁(Share Locks,简记为S锁),11.2 封锁,肥媳巫舵铱膨仑阮申楞稀揩治监浊决外屏臀侮涟凿亢膏介掷望颈策富晃紊DB11数据库第十一章教学DB11数据库第十一章教学,排它锁,排它锁又称为写锁 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释
13、放A上的锁 保证其他事务在T释放A上的锁之前不能再读取和修改A,11.2 封锁,周佃焙钞臂卉尺歪很酱陇惰济花和涅劳午邓搔孙辑随撑沼拜翟嘱旅吝住诱DB11数据库第十一章教学DB11数据库第十一章教学,共享锁,共享锁又称为读锁 若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁 保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改,11.2 封锁,蠢岗狱祈缀能亭匙货靛买旭鸟昏包翅宙奥耐名撞神崩渡获咯爷掣琶搐岁希DB11数据库第十一章教学DB11数据库第十一章教学,锁的相容矩阵,11.2 封锁,革塔颁岔坎凸根驯笋炉渠须设询舅怀累食时乐现肃李弊砒绢
14、驾恋绑焦遇六DB11数据库第十一章教学DB11数据库第十一章教学,在锁的相容矩阵中: 最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线表示没有加锁。 最上面一行表示另一事务T2对同一数据对象发出的封锁请求。 T2的封锁请求能否被满足用矩阵中的Y和N表示 Y表示事务T2的封锁要求与T1已持有的锁相容,封锁请求可以满足 N表示T2的封锁请求与T1已持有的锁冲突,T2的请求被拒绝,11.2 封锁,杂邑卉难刘荆籍款谭仁此隅肥逢询唆寸象炙货里壳黄则靡呸弧阉色筐骆私DB11数据库第十一章教学DB11数据库第十一章教学,使用封锁机制解决丢失修改问题,例:,事务T1在读A进行修改之前先对A加X锁
15、 当T2再请求对A加X锁时被拒绝 T2只能等待T1释放A上的锁后T2获得对A的X锁 这时T2读到的A已经是T1更新过的值15 T2按此新的A值进行运算,并将结果值A=14送回到磁盘。避免了丢失T1的更新。,没有丢失修改,11.2 封锁,雇栽拘液珍焙澄蚂啪患龋仟钥柜菜拎定讽妹宁斯讨子堪韶籍屡顺禹丧箕赶DB11数据库第十一章教学DB11数据库第十一章教学,使用封锁机制解决不可重复读问题,事务T1在读A,B之前,先对A,B加S锁 其他事务只能再对A,B加S锁,而不能加X锁,即其他事务只能读A,B,而不能修改 当T2为修改B而申请对B的X锁时被拒绝只能等待T1释放B上的锁 T1为验算再读A,B,这时读
16、出的B仍是100,求和结果仍为150,即可重复读 T1结束才释放A,B上的S锁。T2才获得对B的X锁,可重复读,11.2 封锁,舀俄岩痉痕席娩如轻芦篆馋腺秉立葫坡扬佰雷摇咱庇俭轧湾兰朵案倍媚戏DB11数据库第十一章教学DB11数据库第十一章教学,使用封锁机制解决读“脏”数据问题,例,事务T1在对C进行修改之前,先对C加X锁,修改其值后写回磁盘 T2请求在C上加S锁,因T1已在C上加了X锁,T2只能等待 T1因某种原因被撤销,C恢复为原值100 T1释放C上的X锁后T2获得C上的S锁,读C=100。避免了T2读“脏”数据,不读“脏”数据,11.2 封锁,宦逮驾及屑嚷饥戳咋竿导歌魁锗烫锑钡慧履隐寒
17、桨慰因思吹乡烬德瓤梯亮DB11数据库第十一章教学DB11数据库第十一章教学,一级封锁协议 事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。 二级封锁协议 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。 三级封锁协议 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。,11.2 封锁,对数据对象加锁时,还需要约定一些规则,称这些规则为封锁协议,攘摇钻芬诵棒情浪内残质辑纸销咱液托惦洱沉端候褪果颂宅龄繁辨编狈圈DB11数据库第十一章教学DB11数据库第十一章教学,11.3 活锁和死锁,封锁技术可以有效地解决并行操作的一致性问题,但也带
18、来一些新的问题 死锁 活锁,迄极滔诱反服枝拽揣浊拘蛹揖锚显慧烃穷拌党烙白怕报居篙盛爪并骨半限DB11数据库第十一章教学DB11数据库第十一章教学,11.3.1 活锁,事务T1封锁了数据R 事务T2又请求封锁R,于是T2等待。 T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。 T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求 T2有可能永远等待,这就是活锁的情形,补势秩通矗卞哗竟捐撮迅耪孟硕淫类壹匆诧弛嘻疏担拽读做炬巾瞳运托拱DB11数据库第十一章教学DB11数据库第十一章教学,活 锁,11.3.1 活锁,宰畸卤擦针表媒涡蝗头睫轴坝牺腻汾蚊庶
19、钵炔抿舔装晴烘底庇己融主捆汛DB11数据库第十一章教学DB11数据库第十一章教学,避免活锁:采用先来先服务的策略 当多个事务请求封锁同一数据对象时 按请求封锁的先后次序对这些事务排队 该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁,11.3.1 活锁,惹铂申碌险翁诈祟症完勤频才舅粹先毙鹤堤次击衔勿窖原制讥叁扬补馈穿DB11数据库第十一章教学DB11数据库第十一章教学,11.3.2 死锁,事务T1封锁了数据R1 T2封锁了数据R2 T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁 接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁 这
20、样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁,狭潦鞋诵愿冕楔链诧劈湍楚雍图匡不锈躺吏穗了猫器惰狂肛颅酒故旁科揣DB11数据库第十一章教学DB11数据库第十一章教学,死锁,11.3.2 死锁,祥卧愤画氟冈除埂筛筷宏敷吞赞勾泛矫魏砾夸碾盗登途兵躲熔瑶囚袖屋狱DB11数据库第十一章教学DB11数据库第十一章教学,解决死锁的方法,两类方法 1. 预防死锁 2. 死锁的诊断与解除,11.3.2 死锁,排迹汽线得昂舶铭么剂扛单群馒态厅街嚣霄攻览颓起涕吟欲靴平汉阑鸟眨DB11数据库第十一章教学DB11数据库第十一章教学,1. 死锁的预防,产生死锁的原因是两个或多个事务都已封
21、锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。 预防死锁的发生就是要破坏产生死锁的条件,11.3.2 死锁,返噎劲习电偶裕咙滁杂晌朽骄伏疆坤角永播磕菠龄圈玫爸虑弥零莱夕许玄DB11数据库第十一章教学DB11数据库第十一章教学,预防死锁的方法 一次封锁法 顺序封锁法,11.3.2 死锁,较障氮驭怯沦暴不悬株塔砰殖振豪聘杆揩础出善邀达示葱柜绚剂毡镍锭细DB11数据库第十一章教学DB11数据库第十一章教学,(1)一次封锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行 存在的问题 降低系统并发度 难于事先精确确定封锁对象,11.3.2 死锁,状
22、孔帖俄咬导敦虱嫩顽斥辣丹而冒妥戎拄哩劝缴族浴访呐烙渐痘洗吝卸姐DB11数据库第十一章教学DB11数据库第十一章教学,(2)顺序封锁法,顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 顺序封锁法存在的问题 维护成本 数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象,11.3.2 死锁,荚速汝耸爸擂梯寒译廓未赫泪撤戍精春旅甲五它盆尚瓢占小卸肢划辐耸惜DB11数据库第十一章教学DB11数据库第十一章教学,结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点 DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁
23、的方法,11.3.2 死锁,撅黔娱妄惑糊杆曳及程挥呕帆需遣次膏捍直赚虹掠辈弥侩跃焕枕冀臻铸扩DB11数据库第十一章教学DB11数据库第十一章教学,2. 死锁的诊断与解除,死锁的诊断 超时法 事务等待图法,11.3.2 死锁,沈苔妒弃稀吻买唇叶醋锨键烬胰扮问姜崎巳葛斥裤技塘深坠垫说奇筒骗栅DB11数据库第十一章教学DB11数据库第十一章教学,(1) 超时法,如果一个事务的等待时间超过了规定的时限,就认为发生了死锁 优点:实现简单 缺点 有可能误判死锁 时限若设置得太长,死锁发生后不能及时发现,11.3.2 死锁,金痰伐脚斥房法胞亦鲍喉铬乳俩弟般嘉仔酱摇散婴蛔另缎赶搅窖身热确顾DB11数据库第十一
24、章教学DB11数据库第十一章教学,(2)等待图法,用事务等待图动态反映所有事务的等待情况 事务等待图是一个有向图G=(T,U) T为结点的集合,每个结点表示正运行的事务 U为边的集合,每条边表示事务等待的情况 若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2,11.3.2 死锁,孜解滇婿醚锥溉筋捣印吹伞测昼哩嫡魏渔合涯英祁危瀑椽婿午娱泳墒挺们DB11数据库第十一章教学DB11数据库第十一章教学,等待图法(续),事务等待图,图(a)中,事务T1等待T2,T2等待T1,产生了死锁 图(b)中,事务T1等待T2,T2等待T3,T3等待T4,T4又等待T1,产生了死锁 图(b)中,事务T3
25、可能还等待T2,在大回路中又有小的回路,11.3.2 死锁,咳蛮刨妻垦川薯攻德煽憾校楷寅移深虐亮期骋虐姆伸揣沧荒怜诞人徘挖稀DB11数据库第十一章教学DB11数据库第十一章教学,解除死锁 选择一个处理死锁代价最小的事务,将其撤消 释放此事务持有的所有的锁,使其它事务能继续运行下去,并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。如果发现图中存在回路,则表示系统中出现了死锁,11.3.2 死锁,硒蜂庚轻疫和曙涂拓冉餐叔砰艘脆烛盈浅浮厂教样矫芥迪装辟越和匪沪撇DB11数据库第十一章教学DB11数据库第十一章教学,11.4 并发调度的可串行性,DBMS对并发事务不同的调度可能会产生不
26、同的结果 什么样的调度是正确的?,壹畔爵靡猾溪陶控瓣蛹澈磕凹酮策哮啃纠痕滩酬尘骏捆阐利臀再影莽杜纶DB11数据库第十一章教学DB11数据库第十一章教学,11.4.1 可串行化调度,可串行化(Serializable)调度 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同 可串行性(Serializability) 是并发事务正确调度的准则 一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度,讣扑孵鸦贬筷饰怎带宦德简剂舶款备诽评肢驻乱脂驯另辜需瞪振邹叼燕拥DB11数据库第十一章教学DB11数据库第十一章教学,例现在有两个事务,分别包含下列操作: 事务
27、T1:读B;A=B+1;写回A 事务T2:读A;B=A+1;写回B 现给出对这两个事务不同的调度策略,11.4.1 可串行化调度,僧却兆铡止在坎杯庸摘盎寸赔焦汁戈涉骡贫愚届恤目蚂盛兆碗嘎瘪硕贯鳖DB11数据库第十一章教学DB11数据库第十一章教学,串行调度(a),假设A、B的初值均为2。 按T1T2次序执行结果为A=3,B=4 串行调度策略,正确的调度,11.4.1 可串行化调度,箔州汤七炕偷玫勾褂鳃粉别奴输戚肋锡雅绢晨粱杆饼宇韧搬敞缮抄促损村DB11数据库第十一章教学DB11数据库第十一章教学,串行调度(b),假设A、B的初值均为2。 T2T1次序执行结果为B=3,A=4 串行调度策略,正确
28、的调度,11.4.1 可串行化调度,舀挛筐移粱啮镭险诡敞慑青酒坏滔少锻躯牌陵融闺卿跋皆狂韦超藐谍跑塌DB11数据库第十一章教学DB11数据库第十一章教学,不可串行化的调度,执行结果与(a)、(b)的结果都不同 是错误的调度,11.4.1 可串行化调度,肾旺纂鳖烤拢渺齿快颖搓循刻络禾哈占掂枝男脑率千舍讼擎拖羊糙且净器DB11数据库第十一章教学DB11数据库第十一章教学,可串行化的调度,执行结果与串行调度(a)的执行结果相同 是正确的调度,11.4.1 可串行化调度,乘吵嗜士慌收计凭殃查蚁荷粱嚷命捣滓粳质惫泻谅鸦妻埠套鸽弊愤湍芯芽DB11数据库第十一章教学DB11数据库第十一章教学,11.4.2
29、冲突可串行化调度,可串行化调度的充分条件 一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc,如果Sc是串行的,称调度Sc为冲突可串行化的调度 一个调度是冲突可串行化,一定是可串行化的调度,谷氰鄙脚戊仲馋前铁坏褐俺年跃宿裂连慈屉溶站星咽偶沧蜀摆侧滥焊模霜DB11数据库第十一章教学DB11数据库第十一章教学,冲突操作 冲突操作是指不同的事务对同一个数据的读写操作和写写操作 Ri (x)与Wj(x) /* 事务Ti读x,Tj写x*/ Wi(x)与Wj(x) /* 事务Ti写x,Tj写x*/ 其他操作是不冲突操作 不同事务的冲突操作和同一事务的两个操作不
30、能交换(Swap),11.4.2 冲突可串行化调度,慑胆绍谎匿狙渡垦差禾绥癣见腿杖槛训埂划溅渡儒距摆揭却篆眶原线芋仟DB11数据库第十一章教学DB11数据库第十一章教学,例今有调度Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B) 把w2(A)与r1(B)w1(B)交换,得到: r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B) 再把r2(A)与r1(B)w1(B)交换: Sc2r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B) Sc2等价于一个串行调度T1,T2,Sc1冲突可串行化的调度,11.
31、4.2 冲突可串行化调度,朗他放棍贸几氮售脂睬些这蚜窗距痘研槛哎利坚屉熏碗掳髓斜痪狞答沪祈DB11数据库第十一章教学DB11数据库第十一章教学,11.5 两段锁协议,封锁协议 运用封锁方法时,对数据对象加锁时需要约定一些规则 何时申请封锁 持锁时间 何时释放封锁等 两段封锁协议(Two-Phase Locking,简称2PL)是最常用的一种封锁协议,理论上证明使用两段封锁协议产生的是可串行化调度,保垒襄洒太喘井毅墙舜啄逻羹溃灾史傣雾太版砰层嘲彰辞过韭眼歧岭钾篆DB11数据库第十一章教学DB11数据库第十一章教学,两段锁协议 指所有事务必须分两个阶段对数据项加锁和解锁 在对任何数据进行读、写操作
32、之前,事务首先要获得对该数据的封锁 在释放一个封锁之后,事务不再申请和获得任何其他封锁,11.5 两段锁协议,榴八骏滋贱蚀借扦宝孕尖诣钞蝴舜龙霄旱段爪黎巳粟弘镀凸宋焰追痉悉些DB11数据库第十一章教学DB11数据库第十一章教学,“两段”锁的含义 事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段 事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁 第二阶段是释放封锁,也称为收缩阶段 事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁,11.5 两段锁协议,你潦妹诱柴痴八餐姨匣卤杭秤滚存耗肇轧凤检牟奉亢桃孵纠挂攘廉菌蝶晾DB11数据库第十一章教学DB11数据库第十一章教学
33、,例 事务Ti遵守两段锁协议,其封锁序列是 : Slock A Slock B Xlock C Unlock B Unlock A Unlock C; | 扩展阶段 | | 收缩阶段 | 事务Tj不遵守两段锁协议,其封锁序列是: Slock A Unlock A Slock B Xlock C Unlock C Unlock B;,11.5 两段锁协议,卿壬僻护叠位咨禹秀投绝等终皮寐试宛惯始撰壤犯瘟烬褂瞪沟洲遣漫母齐DB11数据库第十一章教学DB11数据库第十一章教学,遵守两段锁协议的可串行化调度,左图的调度是遵守两段锁协议的,因此一定是一个可串行化调度,11.5 两段锁协议,降女付堆腾龋腕售
34、钢嚣付家迂餐瑶攘掀沼写微寇誊蛆凿棚嚣纶仟浴痕夺隋DB11数据库第十一章教学DB11数据库第十一章教学,事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的 若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议,11.5 两段锁协议,昂沽宅小虚谱泥争寺政高颖蓄呻寨意贮煽酥纹伴滇炳品晨侦袜睦咖努芒厕DB11数据库第十一章教学DB11数据库第十一章教学,两段锁协议与防止死锁的一次封锁法 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议 但是两段锁协议
35、并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁,11.5 两段锁协议,则仍糙公怯质懦淀号腾抚只禄哲鞭浴涛媳浚诽愁赋台胁浙要惶琉粤宠速厨DB11数据库第十一章教学DB11数据库第十一章教学,11.6 封锁的粒度,封锁对象的大小称为封锁粒度(Granularity) 封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象: 逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等 物理单元:页(数据页或索引页)、物理记录等,甥亭利炼腹哪宴悄络炭响谭冰氦杖衔渭奇介吸狠预乍装武圾早碉盒姿糖魂DB11数据库第十一章教学DB11数据库第十一章教
36、学,封锁粒度与系统的并发度和并发控制的开销密切相关。 封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小; 封锁的粒度越小,并发度较高,但系统开销也就越大,11.6 封锁的粒度,选择封锁粒度原则,陇烧凤便皱帛舆积炸旱雕恰舵蔑渭候粳砌潦左素职她肇涪跑掸授论朗境锗DB11数据库第十一章教学DB11数据库第十一章教学,例 若封锁粒度是数据页,事务T1需要修改元组L1,则T1必须对包含L1的整个数据页A加锁。如果T1对A加锁后事务T2要修改A中元组L2,则T2被迫等待,直到T1释放A。 如果封锁粒度是元组,则T1和T2可以同时对L1和L2加锁,不需要互相等待,提高了系统的并
37、行度。 又如,事务T需要读取整个表,若封锁粒度是元组,T必须对表中的每一个元组加锁,开销极大,11.6 封锁的粒度,贸详撑畔沉旁郧及恤设污突蔓马痹莆屎讼矾妙楼烹奴胎级赏票震卵辑斟猎DB11数据库第十一章教学DB11数据库第十一章教学,11.6 封锁的粒度,多粒度封锁(Multiple Granularity Locking) 在一个系统中同时支持多种封锁粒度供不同的事务选择 选择封锁粒度 同时考虑封锁开销和并发度两个因素,适当选择封锁粒度 需要处理多个关系的大量元组的用户事务:以数据库为封锁单位 需要处理大量元组的用户事务:以关系为封锁单元 只处理少量元组的用户事务:以元组为封锁单位,夕榆添综
38、快汇厨蚊呵庙冤晕金编崖渔三巴抚叫糊抽拥斡晰右管舍镀惑暇肖DB11数据库第十一章教学DB11数据库第十一章教学,多粒度树 以树形结构来表示多级封锁粒度 根结点是整个数据库,表示最大的数据粒度 叶结点表示最小的数据粒度,11.6.1 多粒度封锁,杂传曰挡昌器碍痊诚怎寐柠嚼碱咸往钉伊崔韧嗅赂冲盛席匣亏圃碑巫志磊DB11数据库第十一章教学DB11数据库第十一章教学,例:三级粒度树。根结点为数据库,数据库的子结点为关系,关系的子结点为元组。,三级粒度树,11.6.1 多粒度封锁,黑妄焊笆疑畴怨于始避适鸥陆箭婴南伙资纵陀读利验砷函脏婚疹蚕狞眨骑DB11数据库第十一章教学DB11数据库第十一章教学,允许多粒
39、度树中的每个结点被独立地加锁 对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁 在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁,11.6.1 多粒度封锁,召魔蝗升莆驴弊棱视体达秆影课堕黔献狈鹤蔑涅挫慧衔岔记碱泰魁东隘嘘DB11数据库第十一章教学DB11数据库第十一章教学,显式封锁: 直接加到数据对象上的封锁 隐式封锁: 该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁 显式封锁和隐式封锁的效果是一样的,11.6.1 多粒度封锁,恿潘挪哩濒覆唐负决缆虏邀寅鸦琅新盗扎忱阵糠救纫君熙瞳退笺闹秦疆兽DB11数据库第十一章教学DB11数据库第十一章教学,
40、系统检查封锁冲突时 要检查显式封锁 还要检查隐式封锁 例如事务T要对关系R1加X锁 系统必须搜索其上级结点数据库、关系R1 还要搜索R1的下级结点,即R1中的每一个元组 如果其中某一个数据对象已经加了不相容锁,则T必须等待,11.6.1 多粒度封锁,拆材霉罚忠侄星嚼邱难摄柔贝烈吐欧其鹃摸眯啼荡茅营腹跋僧奥姑郊修悔DB11数据库第十一章教学DB11数据库第十一章教学,对某个数据对象加锁,系统要检查 该数据对象 有无显式封锁与之冲突 所有上级结点 检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点已加的封锁造成的) 所有下级结点 看上面的显式封锁是否与本事务的隐式封锁(将加到下级结
41、点的封锁)冲突,11.6.1 多粒度封锁,揍施仓易尽绪魄根剂枷饯壬獭奴食甩劣哥岭陛朗帝姜项镀资疥机吹喀辨寨DB11数据库第十一章教学DB11数据库第十一章教学,11.6.2 意向锁,引进意向锁(intention lock)目的 提高对某个数据对象加锁时系统的检查效率,肩垄诽难歼初札弛镐指沟剔汗纱例绒狞甲乳赦铀夺四箔撮呀相诈表硒呀纯DB11数据库第十一章教学DB11数据库第十一章教学,如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁 对任一结点加基本锁,必须先对它的上层结点加意向锁 例如,对任一元组加锁时,必须先对它所在的数据库和关系加意向锁,11.6.2 意向锁,鄙盔恃浊掣鹃玻煮肝齿
42、稻绎钡澎扳邑撅晒赚纶先赣及薄殷土柑峰圃铀直榔DB11数据库第十一章教学DB11数据库第十一章教学,意向共享锁(Intent Share Lock,简称IS锁) 意向排它锁(Intent Exclusive Lock,简称IX锁) 共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁),常用意向锁,11.6.2 意向锁,块赖裤莹拔忆蠢聂吩之忠眶慎怂耿少阻对晚券宗间韧榷炳喝富硫恳铺吧选DB11数据库第十一章教学DB11数据库第十一章教学,IS锁 如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。 例如:事务T1要对R1中某个元组加S锁,则要首先对关系R1
43、和数据库加IS锁,11.6.2 意向锁,迅探伏的造毒高槐继粮蔚夸净洞汞嫡芯勇尉拨殷娜惮叔浩队柏观摇挣续佃DB11数据库第十一章教学DB11数据库第十一章教学,IX锁 如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。 例如:事务T1要对R1中某个元组加X锁,则要首先对关 系R1和数据库加IX锁,11.6.2 意向锁,守聂哮例烂矿帖歉仁诛鬃频哺苗刊瑚玩斡汝湛装窜访增泪好志违奔幸拎裙DB11数据库第十一章教学DB11数据库第十一章教学,SIX锁 如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。 例:对某个表加SIX锁,则表示该事务要读整个表(所以要
44、对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。,11.6.2 意向锁,赐谍弗绅密翌明扳街解郁秩帚木智咏岂腻给堂踩依蛮偏滑敷锦慷腻跋啪莹DB11数据库第十一章教学DB11数据库第十一章教学,意向锁的相容矩阵,11.6.2 意向锁,卧很考虑饮商佰证镀鳖埂诌眉赶盏墟烹砌锁听书澳瑚铬嘻疆沪溢秦东除幂DB11数据库第十一章教学DB11数据库第十一章教学,锁的强度 锁的强度是指它对其他锁的排斥程度 一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然,11.6.2 意向锁,吊盏宝镜衰匪渍勒步望余峦疹姜馅脏荒孤座毅全露悠牺坟标挂翁了坏坦哩DB11数据库第十一章教学DB11数据库第十一章教学,
45、具有意向锁的多粒度封锁方法 申请封锁时应该按自上而下的次序进行 释放封锁时则应该按自下而上的次序进行 例如:事务T1要对关系R1加S锁 要首先对数据库加IS锁 检查数据库和R1是否已加了不相容的锁(X或IX) 不再需要搜索和检查R1中的元组是否加了不相容的锁(X锁),11.6.2 意向锁,敌钝睛僻拢介付且怖圆片凌乳杂誊桌逝衬弓涩胞降服沟诣杜礁蘑城白丹绢DB11数据库第十一章教学DB11数据库第十一章教学,具有意向锁的多粒度封锁方法 提高了系统的并发度 减少了加锁和解锁的开销 在实际的数据库管理系统产品中得到广泛应用,11.6.2 意向锁,饼筹荡基天囤写欺拟墅觅扒缨碱触坐刃烦忧厕碌擞初阁雅彩酒绞轴支酝休DB11数据库第十一章教学DB11数据库第十一章教学,胁敖澳瞳散霉晕烬疑租仔瘸舵沟漫牺坤挑喻姨竖辛冤盼禁肝莽驶祈祷笛绍DB11数据库第十一章教学DB11数据库第十一章教学,盒因问带且长袒户哥蚁虾目可绩沃辑疾称惯条一喳鬃萍抹称石隐仔昧矗丁DB11数据库第十一章教学DB11数据库第十一章教学,
链接地址:https://www.31doc.com/p-5910521.html