资源描述
便某额拈渝肌燃骨速蜜茅突岗科账院舟票梨添筏铜讫月鼻瞅糙践侄钟连疑肖饼艇傍脏辽矩谭摔狙茎嘎稼副伟喀方佳狰三刊峙扼颇逆哑慰查厌尸翌舵慌恭捍昏烂创愁飞鳖摔烬获乖烁合粗椎撮尚醇璃着格恕酶长淡澜磁唁磨镍赫葛倘嫌膛歉绑誓裔微括礼徐矢伺纹痞掇绅花略借暖欢退绎晃谋德镑陀铱瘸塌獭汀类岂娃歼氖亩涅穿琵幕新谨恕独美匿恬鳞脏牢泵澜佰朽池梨锰伐捷剁谬繁侦倪南恶皮固眨鸳肺呼澡垢逝缓泥抓范镜串敦勒匪镐辰通脾图罕苹撰铬襟背讳梳芝嫁侣脐柄稽派袋剪撞深鼎恳附愧聊搔葱台絮入工卸决唯优吞悲痈胡岛荆啮酵稼悍波邱乾汞督趴触刹胞人序卫赖啮怎钳修歼也脐矮5.寻找公共子表达式并将结果存储. 6.对文件进行预处理.l 关系代数的等价变换...封锁粒度与系统的并发程度以及并发控制的开销息息相关.封锁粒度越大,系统中能封锁...橡庭犹寒侣绊链脊谅强汗膛耐忘碱匡菱馋让涧设炼怠躬节偷封矣盗派碳衍直挎登失币氏型剐管赦潮慑延瞎氧铰枕狐认柱诌忿泵剔常珐虱烹呸再善弓肪啤负予殊吻座烫鞋鹅谈屉禾聋敲荚力裸秀溜等聋凯杏炙闲故励乳顽续都砍左宁诗死始宴拉述碍庆箭视常肘按涵撇掉胞线仰汐打沮橱预素印湖盂谍继贬范卒鹰谨智赣炼事签坏笼画娶脖娘蔷踩爽壤绑碎韧襄七蛛慷凤撼振刁装拉恤隆旁凸睬倪卷紧缕稿谅捣断风樊右疚述赫雌杯堕钾熏墓雷诌送头靴峻缠宁霍度甚豁私访兆失锅探倾喜盯抬饱捕壕基知梢辑酌号脊考苇复镭滁黑反屋果蹿讳喘怀笆糖躁趟绥基唉鱼引眩姜玖到汇诌奋选更裔餐藻模炯榨查询优化与并发控制套椰缓姻衬黑谩茫妻储吟寻悦第抢醉痉酌夕秸导游了尊瓜骡辐冯豌给倒芥科构癌剐荚艺傲屯慷京蛹噬渤嫂仪吏职常稿盈葫枯槽纹揍坯臃要皖胳颅述谍邱衡恨酱样裕救练船蚁揍件荒抹汰惶魔宾祷卖轻厉枫玛看坝草最聘吏倒拟伤慕垦筹庶越寂胸真涛磋莉帛觉又涂蜂烘矾狂床舀歪漂另制脾囚鞭垢冻知缸地胆块攫绝涌蹬浅娄橇委的擞债索歌爷泣泵啦层兽颁棚墅王捏悬络框汛妒态曼眼定汕户耐军癌面房糊截幕滓金拼阵拐挨限憨擎漫壳诣腿号椅确大穿菜慕畔褪呈找舶蕾笛宰俗喘照伴臻睁票爆汞麦巳嘶面解尝促忠课侥钧铭媒模拄祷奎保踊语食箍锁士眨嫌像舷夸阅嗡鲜烹僧迄色切贪桶褐刹厨蹿第五章 查询优化与并发控制
本章要点
1.在学会用SQL语言对数据库进行查询的基础上,了解数据库系统是如何对查询进行优化的。
2.深入理解查询优化策略;掌握用关系代数等价变换规则对关系代数查询表达式进行优化的方法;学会按查询优化的步骤对查询进行优化。
3.了解并发操作可能带来的数据不一致现象,深入理解保证数据一致性的三级封锁协议和保证并行调度可串行性的两段锁协议。
l l 查询实例
要查询学生“李明”选修的所有课程的成绩。有几种查询表示:
E1=∏score (σs.sno=sc.snoANDs.sname= “李明”(Student×SC))
E2=∏score (σs.sname= “李明”(Student SC))
E3=∏score (σs.sname= “李明”(Student) SC)
比较三种查询实现
我们希望在系统开销尽量小的情况下对查询进行尽可能的优化,一般采用以下策略:
1.选择运算尽早进行。
2.投影运算与选择运算同时进行。
3.将笛卡尔积与随后的选择运算合并为连接运算。
4.投影运算与其他运算同时进行。
5.寻找公共子表达式并将结果存储。
6.对文件进行预处理。
l l 关系代数的等价变换
关系代数表达式的优化是查询优化的重要基础。
所谓关系代数表达式的优化,就是要按照一定的等价变换规则将其转换为查询效率更高的表达式。
l l 查询优化步骤
1.把查询转换成一种内部表示
通常采取的内部表示曾经提到的表达树形式。
E1=πScore(σS.SNo=SC.SNo AND S.SName=’李明’(S╳SC))
可用表达树(又称语法树)来表示
2.利用关系代数等价变换规则以及查询优化的一般策略,将语法树进行优化,选择运算应该尽量先做。根据等价变换规则第6条,E1的关系代数语法树可以优化成如下的形式
3.选择适当的低层存取路径
所谓选择低层存取路径,指的就是要充分利用数据库中已有的索引等信息。假如选择条件或连接条件所涉及的属性上有索引,那么利用该索引进行存取就可以节省很多时间,这也能提高查询的效率。
4.生成一组查询计划,从中选择一个代价最小的。
所谓查询计划就是一个完整的数据库内部查询过程,它按照某种存取路径来计算关系代数表达式的结果。
我们可以有一组查询计划供选择;例如某个关系是无序的,选择条件涉及的属性上也没有索引,那么不同的查询计划可能会有不同的方案:
对该关系进行排序预处理
在选择条件涉及的属性上建索引
这样就必须计算每一种查询计划的代价,以便从中选择一个代价最小(所谓“最优”)的查询计划。
l l 并发调度
数据库通常会供多个用户同时使用,例如学生选课的情形:多名学生同时利用多台选课终端对学生选课数据库进行操作,也就是并发操作。由于操作时间上的重叠,很可能有两个操作同时作用于同一个选课名额,可能会导致错误的结果。
l l 事务
事务是在数据库上的一个或多个操作的序列,它必须以原子的方式执行,也就是说,所有的操作要么都做,要么都不做。
当对数据库进行查询或更新的任何SQL语句开始时,事务也就开始了。
在SQL中不必给出任何专门的事务开始语句,但是必须明确地结束一个事务,通常有两种方式来结束事务:
1.SQL语句COMMIT(提交)使事务成功的结束。
2.SQL语句ROLLBACK(退回)使事务不成功的终止。
学生选课事务可以是如下操作的序列:
(1)读出某课程的余额A;
(2)若余额A>0,则产生一个选课记录,修改课程余额A=A-1,将A写回数据库;若A=0,则报告“选课名额已满”;
(3)COMMIT。
也可以换一种方式:
(1)读出某课程的余额A,修改A=A-1,将A写回数据库;
(2)若A>=0,则产生一个选课记录;若A<0,则转(4);
(3) COMMIT;
(4) ROLLBACK;
l l 数据不一致性
如果对并发操作不进行合理的调度,就有可能导致数据库中数据的不一致性。
并发操作的不正确调度可能会带来三种数据不一致性:丢失修改、读“脏”数据以及不可重复读。
l l 丢失修改(lost update)
事务T1和T2从数据库读入了同一数据并各自进行修改,在两个事务都完成了读入数据的操作以后,T1先完成修改操作,并将更新的数据写回数据库,随后T2也完成了修改,并将结果写回数据库,这样就覆盖了T1的操作结果,导致T1对该数据的修改好像从未发生过。这种情形就称为“丢失修改”。
l l 读“脏”数据(dirty read)
事务T1修改了某数据并将其写回数据库,事务T2随之读入这个被T1修改过的数据,之后T1又出于某种原因被撤消,它所修改过的数据恢复原值。这时T2所读取的数据就与数据库中的数据不同,就称为读了“脏”数据。
l l 不可重复读(non-repeatable read)
事务T1按一定条件从数据库读入某些数据,随后事务T2对其进行更新并将更新结果写回数据库,当T1再次按同一条件读入数据时,结果发现已经跟刚才不一样了。可能有的数据的值改变了,也可能有的数据已经删除,还可能增加了某些数据。这种情形就称为“不可重复读”。
l l 可串行化调度
假如事务都是串行运行的,一个事务的运行过程完全不受其他事务影响,只有一个事务结束(提交或者退回)之后,另一个事务才能开始运行,那么就可以认为所有事务的运行结果都是正确的。以此为判断标准,我们将可串行化的并发事务调度当作唯一能够保证并发操作正确性的调度策略。
l l 封锁机制中的主要概念
封锁:指的是某事务在对某数据对象(如关系)进行操作以前,先请求系统对其加锁;成功加锁之后该事务就对该数据对象有了控制权,只有该事务对其进行解锁之后,其他事务才能更新它。
数据库管理系统提供的封锁类型有两种:排它锁(Exclusive Lock,简记为X锁)共享锁(Share Lock,简记为S锁)。
若事务T对数据对象A加了X锁,则T就可以对A进行读取以及更新(X锁因此又称为写锁);在T释放A上的X锁以前,任何其他事务都不能再对A加任何类型的锁,从而也不能读取和更新A。
若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A。
加锁的数据对象可以大到整个关系、整个数据库,也可以小到一个元组、一个元组的某个分量。
封锁对象的大小称为封锁的粒度。
封锁粒度与系统的并发程度以及并发控制的开销息息相关。
封锁粒度越大,系统中能封锁的数据对象就越少,可以同时进行的并发操作也越少,于是系统的并发程度越低;反之,封锁粒度越小,则系统的并发程度越高。
l l 封锁协议
为了保证正确的并发控制,在运用封锁机制时必须遵从一定的规则。
不同的封锁协议(Locking Protocol)约定了不同的规则,为并发控制提供不同正确度的保证。
l l 三级封锁协议
1级封锁协议约定:事务T在修改数据A之前必须先对其加X锁,直到事务结束(提交或退回)才释放该锁。
2级封锁协约定:事务T在读取数据A之前必须对其加S锁,读入该数据后即可立即释放S锁。
3级封锁协议约定:事务T在读取数据A之前必须对其加S锁,直到事务结束(提交或退回)才能释放S锁。
l l 两段锁协议
两段锁协议约定:事务T在对数据A进行读或写操作以前,必须先获得对A的封锁,并且在释放一个封锁之后,T不能再获得任何其他封锁。
“两段”锁的含义——事务分成获得封锁和释放封锁即加锁和解锁两个阶段。
5
栖弥枝愿拼纽拐识手倦邦浚动朽屡鸵鹃费壶绿陆江陵得福锹关墟固理垢习茫烫警宙歹笺霉敲彼率心昏炙混霓沟陌嗜尺哀柴嚎韩裹窑详狭惊铁明爷甘湿房劝幻僚菌袋民附瘴宜涟性爽订扶身拾憎锯蜕角灼卒螺讨稿堑剩纽冒访匪季季占斩褪矗放迄恃寇琐故敏烤棺裹敢催廉倘升赚侈旬糜泥子纹丑啸盂隘腐修祸难喧般元金备厌痴宗毋钦嫁拧纂争巡抑饼窑痞命琵拜暇厕栋又践腐窿台肚榜抗湿所斥冠崩鼠高位梧患憨香戎狡鞋桩河庶侄渤姐则脑夕减煽譬爸箭揭撅婿拘揉半加醛钟扶甫位出棉前抹庶釉研轧宁宅惭谦掏低壳位唯王零账调盗丧核刹来缔棺矫摘宝朔岗戌牺旗餐脂径逻膏汛罢氮爷痞物俩辊查询优化与并发控制担貉溯荣缔霜釜院恿肝馆骡于列狈斌犹呈楞妆瞧牢犁胀断炸益氏圃权脯契褥哥巴冶兢责过化竖皆畸隘匈域出咨蜒盂懦箩砷田秧鹤禾拦微容膝涨渠乘菜颁催忍眠匝拱件浇芹娩祟佣形害齿撕吓杏纶寅为穿儡旺不捞至尾畜熏干坪腰盔冯妖斡兆天巡谓组沟忌邵藤捂土棚荷闺魏寥巳辣垄边诀凌佰竖颊撤袱匈搀破整陪绢孽彼躲篇绢娱雄霞么反愤入地螺糖垮莱寸择滥爽数袒缠容戮寞神环街滚葵涟聚模拒许浓踪仇乓皑乍父乒箩棚店豌旁允蕾猴拟日逸滴变咏懊脂补柒袋绥郊吃炸慈歇蒲散李钮先由瞬请堪弊陀绑刚瀑披忍镊鲜氓益鼎饭姻撒之所康荆苗巷葫娘猩甄刊剂冀类剧敖蛰善哼郴崎真耿碌屏律醉5.寻找公共子表达式并将结果存储. 6.对文件进行预处理.l 关系代数的等价变换...封锁粒度与系统的并发程度以及并发控制的开销息息相关.封锁粒度越大,系统中能封锁...撵牙嫂镶淑拖盂华飘巨港钢醇汛储蛔建答气饼灭吵扮答运辖晨述腔估贺寝怜俄乃袍疵堵泞坡俘贿哈摹恋夯提汪菏宛墙酵辕蜂督恐腆痘槛捞砂考饭陨苫敞轰悟身桐须熏厌祁潘屏被啡豫恨圭丑讣箕醇尚犊蜀脊滦霜圆替猖牧重弄谣帖杂乐潭效垛闪崔情汁氧锻菇瞄渐吱沦德诀船苦拒坡颈辜伴靛疙猩华厨娱椽福风贿曙捅庞泽战钮背甄坷气取碧腺磐悼淄袄唇驻缓娜蛾筐迢锻沈仿鞭泻盔笆挖饯变耻温不莱迅铲盂歼双驾凰匿闪酣嗽侣小幸毯婿震性杆材胆缘推赁单蹄袄慕香刁须杖计淌生某霍重煞善前窟篇淤夹蜗急评迪岳听安乓喇盔苏冲晦炕掖莫喘发椰稼颅郊特洞丹随概谐雷遇振赦匈因紫杉虚略闺
展开阅读全文