数据库作业答案_第1页
数据库作业答案_第2页
数据库作业答案_第3页
数据库作业答案_第4页
数据库作业答案_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、习题2.2.1 Megatron 777磁盘具有以下特性:1、 有10个盘面,每个盘面有100000个磁道。2、 磁道平均有1000扇区,每个扇区为1024字节。3、 每个磁道的20%被用于间隙。4、 磁盘旋转为10000转/min。5、 磁头移动n个磁道所需要的时间是1+0.0002*n ms。回答下列关于Megatron 777的问题。a) 磁盘的容量是多少?磁盘容量 = 101000001001024Bytes = 109KBb) 如果磁道是在直径3.5英寸的圆面上,那么一个磁道的扇区中的平均位密度是多少?位密度是指磁道上单位距离可记录的比特数,单位bpi(bits/inch)。我们选取

2、中间磁道来计算平均位密度,中间磁道的直径为 3.5inch/2 ,该磁道的周长为(3.5/2)inch,扇区所占的周长是80%(3.5/2)inch。同时,每个磁道的容量是100010248 bits所以一个磁道的扇区中的平均位密度是(100010248)bits/(80%3.5/2)inch = 1861733.6 bpic) 最大寻道时间是多少?当磁头移动100000个磁道时,寻道时间最大 1+0.0002100000 ms = 21msd) 最大旋转等待时间是多少?当所需要块的起点刚好从磁头下面越过,则要等待旋转一周的时间。最大旋转等待时间 = (1r)/(10000r/min)= 6

3、ms/re) 如果一个块是65536字节(即64扇区),一个块的传输时间是多少?磁头必须越过64个扇区和扇区之间的63个间隙。被64个扇区和63个间隙覆盖的圆弧的总度数为:36080%64/1000+36020%63/1000 = 22.968 度传输时间是(22.968/360)6 ms = 0.3828 msf) 平均寻道时间是多少?平均移动距离是移动整个磁盘的1/3,所以平均寻道时间为:(1000001/3)0.0002+1 ms = 7.67 msg) 平均旋转等待时间是多少?平均旋转等待时间为旋转半周所需的时间,由d)可知,为:6/2 ms = 3 ms习题2.2.3 证明如果我们将

4、磁头从一个随机的柱面移动到另一个随机的柱面上,平均移动距离是扫描过整个磁盘的1/3(忽略因有限柱面数目产生的边际效应)。假设磁头起初以相同的概率被定为在8192个柱面的任一位置。如果是在柱面1或柱面8192,那么移动的平均磁道数是(1+2+8191)/8191,即大约4096磁道。如果是在柱面4096,即中间位置,则磁头移进或移出的可能性是相同的,而且无论移进还是移出,移动距离平均来说大约是总磁道数的四分之一,即2048磁道。计算表明,当磁头的初始位置从柱面1到柱面4094变化时,磁头需要移动的平均距离按二次方回升到4096,如上图所示。我们令r = 8192,初始磁道x,平均行进距离y,则计

5、算该二次函数可得y = (1/r)x2 x + r/2对所有初始位置进行积分0r(x2/r x + r/2)dx = (x3/3r - x2/2 + rx/2)|0r = r2/3所以平均行进距离 = r2/3/r = r/3,即越过整个磁盘的1/3习题2.3.1 假设我们正在为Megatron 747磁盘调度I/O请求,磁头的初始位置在磁道32000,图2-9的请求已经产生。在下面两种情况下,每一种请求在何时完全得到服务?请求的柱面到达时间800004800014000104000020a)我们采用电梯算法(起初朝任一方向开始移动都是允许的)。请求的柱面完成时间计算说明800011.31+(

6、32000-8000)/4000+4.3+0400017.61+(8000-4000)/4000+4.3+11.34800033.91+(48000-4000)/4000+4.3+17.64000041.21+(48000-40000)/4000+4.3+33.9b)我们采用先到达先服务调度。请求的柱面完成时间计算说明800011.31+(32000-8000)/4000+4.3+04800026.61+(48000-8000)/4000+4.3+11.3400042.91+(48000-4000)/4000+4.3+26.64000057.21+(40000-4000)/4000+4.3+4

7、2.9习题2.3.4 如果我们要从一个柱面上读k个随机选定的块,在我们经过所有的块之前,平均来说我们必须绕着柱面走多远?设k个块的位置分别以圆周的分数标识x1,x2,.,xkx1,x2,.,xk均小于01之间某个t值的概率为tk,t的概率密度为ktk-1,t的平均值为01(ktk-1)tdt = k/(k+1)因此平均来说必须绕着柱面走k/(k+1)磁道长度。习题2.4.2 如果我们在一个串末附加一个位作为该串各奇数位置的奇偶校验位,另一个位作为该串各偶数位置的奇偶位,我们就有了与一个串关联的两个奇偶位。对于下列位序列,找出这种方法计算的两个位。a) 0011101110b) 00000000

8、00c) 1010110110习题2.4.3 假设我们使用例2.8中的镜像盘,每年故障率为5%,更换一个盘要花10小时。导致数据丢失的磁盘平均故障时间是多少?替换故障磁盘的过程花10小时,相当于一年的10/(24365)= 1/876由于我们假定磁盘的平均寿命是20年,拷贝过程中发生故障的可能性是5%1/876 = 1/17520如果一个磁盘每20年年发生一次故障,那么两个磁盘之一平均10年发生一次故障。这些故障的每17520个中有一个导致数据丢失。换句话说,导致数据丢失的平均时间是1017520 = 175200年。习题2.4.5 假设我们使用RAID 4级方案,有4个数据盘和一个冗余盘。与

9、例2.9一样,假设块为单字节,如果数据盘的相应块如下,给出冗余盘的块。a) 01010110,11000000,00101011和1011101100000110b) 11110000,11111000,00111100和0100000101110101习题2.4.7 采用和习题2.4.5一样的RAID 4级方案,假设数据盘1有故障。在下列情况下恢复该磁盘的块:a) 盘2至盘4的内容为01110110,11000000和00101011,同时冗余盘保存着1111001101101110b) 盘2至盘4的内容为11110000,11111000和00110011,同时冗余盘保存着10000001

10、10111010习题2.5.1 假设一条记录有如下顺序的字段:一个长度为23的字符串,一个2字节整数,一个SQL日期,一个SQL时间(无小数点)。如果a) 字段可以在任何字节处开始,b) 字段必须在8的倍数的字节处开始,c) 字段必须在4的倍数的字节处开始,这条记录占用多少字节?长度为23的字符串占用23字节,整数2字节,一个SQL日期10字节,一个SQL时间8字节。a)23+2+10+8 = 43字节b)24+8+16+8 = 56字节c) 24+4+12+8 = 48字节习题2.5.2 假设字段同习题2.5.1,但是记录有一个首部,它由两个4字节的指针和一个字符组成,对习题2.5.1中字段

11、对齐的(a)至(c)3种情况,计算记录长度。假设字符为英文字符,则占1字节。首部长度为4+4+1a)4+4+1+43 = 52字节b)8+8+8+56 = 80字节c) 4+4+4+48 = 60字节习题2.6.5 现在,IP地址有4个字节,假设一个全球范围的地址系统中块地址由主机IP地址,1到10000之间的设备号以及各个设备号(假设为Megatron 747磁盘)上的块地址组成。块地址需要多少字节?IP地址4字节213 10000 柱面号2字节磁道号 16位2字节磁道内块号 8位1字节综上,块地址需要 4+2+2+2+1 = 11字节习题2.6.7 假设我们自动混写所有指针,所用的总时间是

12、单独混写每一个指针所用总时间的一半。如果主存中一个指针被至少跟踪一次的概率为p,p为何值时自动混写比按需混写更有效?设c是单独混写每一个指针所用总时间。则自动混写总时间为c/2,按需混写的总时间是pc,根据题意,则得到关系pcc/2,从而p1/2习题2.6.9 假设我们有4096字节块,块中存储200字节长的记录。块首部由一个偏移量表组成,如果2-19所示,它使用2字节长指针指向块内记录。通常,每天向每块插入两条记录,删除一条记录。删除记录必须使用一个“删除标记”代替它的指针,因为可能会有悬挂指针指向它。更明确地说,假设任何一天删除记录总发生在插入之前。如果刚开始时块是空的,多少天之后,不再有

13、插入记录的空间?第一天,只做插入操作,插入两条记录,同时使用2个指针指向记录,总计增加了2(2+200) = 404字节。之后的每一天都先删除一条记录再增加两条记录,净增404-200 = 204字节由于(4096-404)/204 = 1820,即在1+18 = 19天之后,块中剩余空间为20字节。在第20天,先删除一条记录,余下200+20=220字节空间,这时候只能够再插入一条记录(202字节)。习题2.7.1 一个病人记录包含以下定长字段:病人的出生日期,社会保险号码,病人ID,每一个字段都是9字节长。它还有下列变长字段:姓名,住址和病史。如果记录内一个指针需要8字节,记录长度是一个2

14、字节整数,不包括变长字段空间,这条记录需要多少字节?你可以假设不需要对字段进行对齐。定长字段需要 39=27字节,记录长度2字节,指向“住址”的指针8字节,指向“病史”的指针8字节,所以一共需要27+2+8+8 = 45字节。习题2.7.3 假设在习题2.7.1的病人记录上添加另外的可重复字段,表示胆固醇化验,每一次胆固醇化验需要一个24字节的日期和化验的整数结果。如果a) 重复化验保存在记录中。b) 化验存储在另外一个块中,记录中存储指向化验的指针。分别给出病人记录的格式。a)b)习题2.8.1 关系数据库系统总是倾向于尽可能使用定长元组,给出这种优先考虑的三种理由。1) 便于修改,当一个定

15、长记录被修改时,对存储系统没有影响,因为我们知道它占用与修改前完全相同的空间。2) 更有效地对记录进行搜索。3) 对定长元组的删除和插入管理相对变长记录来说要简便。习题6.1.1 假设数据库上的一致性约束是0AB。判断以下各事务是否保持一致性。a) B:=A+B; A:=A+B; 不能保持一致性b) A:=B+1; B:=A+1;保持一致性c) A:=A+B; B:=A+B;保持一致性习题6.2.3 下面是两个事务T和U的一系列日志记录:;。请描述恢复管理器的行为,包括对磁盘和日志所做的改变,假设故障发生且出现在磁盘上的最后一条日志记录为:a) 事务T、U未提交,要被撤销。向后扫描日志,遇到记

16、录,于是将A在磁盘上的值存为10。最后,记录和被写到日志中且日志被刷新。b) 事务T已提交,U未提交,要被撤销。向后扫描日志,首先遇到记录,于是将C在磁盘上的值存为30。接着遇到记录,并将A在磁盘上的值置为10。最后,记录被写到日志中且日志被刷新。c) 事务T已提交,U未提交,要被撤销。向后扫描日志,首先遇到记录,将E在磁盘上的值存为50。接着遇到记录,于是将C在磁盘上的值存为30。再遇到记录,并将A在磁盘上的值置为10。最后,记录被写到日志中且日志被刷新。d) 事务T、U均被提交。什么都不做。习题6.2.7 考虑如下日志记录序列:;。假设我们在如下日志记录中的某一条写入(主存)后立即开始一个

17、非静止检查点:a) b) c) d) e) 对其中的每一个,说明:何时写入记录。对于每一个可能发生故障的时刻,为了找到所有可能未完成的事务,我们需要在日志中回溯多远。a)当前活跃的事务只有S,日志记录为,所以在之后写入记录。如果故障发生在记录之后,那么我们可以扫描直到下一个记录停止。如果故障发生在之前,那么我们要回溯到。b) 当前活跃的事务只有T,日志记录为,所以在之后写入记录。如果故障发生在记录之后,那么我们可以向后扫描直到下一个记录停止。如果故障发生在之前,那么我们要回溯到。c)当前活跃的事务有T和U,日志记录为,所以在之后写入记录。如果故障发生在记录之后,那么我们可以向后扫描直到下一个记

18、录停止。如果故障发生在之前,那么我们要回溯到。d)当前活跃的事务有T、U和V,日志记录为,所以在之后写入记录。如果故障发生在记录之后,那么我们可以向后扫描直到下一个记录停止。如果故障发生在之前,那么我们要回溯到。e)当前活跃的事务有T和V,日志记录为,所以在之后写入记录。如果故障发生在记录之后,那么我们可以向后扫描直到下一个记录停止。如果故障发生在之前,那么我们要回溯到。习题6.3.2 使用习题6.2.7的数据,对该习题中(a)到(e)的各个位置,回答:)何时能写入记录。)对每一个可能发生故障的时刻,为了找到所有可能未完成的事务,我们需要在日志中向后看多远。请考虑记录在崩溃发生之前写入和未写入

19、的两种情况。a)当前活跃的事务只有S,日志记录为,所以在之前写入记录。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定没有已提交的事务。b) 当前活跃的事务只有T,日志记录为,所以在之前写入记录。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务只有S,重复其动作,并在恢复后将记录

20、写入日志中。c)当前活跃的事务有T和U,日志记录为,所以在之前写入记录。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务只有S,重复其动作,并在恢复后将记录和写入日志中。d)当前活跃的事务有T、U和V,日志记录为,所以在之前写入记录。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确

21、定已提交的事务只有S,重复其动作,并在恢复后将记录 、和写入日志中。e)当前活跃的事务有T和V,日志记录为,所以在之前写入记录。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务有S和U,重复其动作、,并在恢复后将记录和写入日志中。习题6.3.4 使用redo日志,重复习题6.2.3。a) 事务U和T都未提交,什么都不做,磁盘数据无变化,在日志中写入和记录并刷新日志。b)事务T已提交,为B写入值20,为D写入值40,在日志中写入记录

22、并刷新日志。c)事务T已提交,为B写入值20,为D写入值40,在日志中写入记录并刷新日志。d)事务T和U已提交,为A写入值10,为B写入值20,为C写入值30,为D写入值40。习题6.4.2 下面是两个事务T和U的一系列日志记录:;。请描述恢复管理器的行为,包括对磁盘和日志所做的改变,假设故障发生且出现在磁盘上的最后一条日志记录为:a) 事务U未提交,回滚U(从后往前),A的值置为10。在日志中写入记录并刷新日志。b) 事务T已提交,重做T,将B的值置为21,D的值置为41。事务U未提交,回滚U(从后往前),将C的值置为30,A的值置为10。在日志中写入记录并刷新日志。c) 事务T已提交,重做

23、T,将B的值置为21,D的值置为41。事务U未提交,回滚U(从后往前),将E的值置为50,C的值置为30,A的值置为10。在日志中写入记录并刷新日志。d) 事务T和U都已提交,重做T、U,将A的值置为11,B的值置为21,C的值置为31,D的值置为41,E的值置为51。习题6.4.4 考虑如下日志记录序列:; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;。假设我们在如下日志记录中的某一条写入(主存)后立即开始一个非静止检查点:a) b) c) d) e) 对其中的每一个,说明:何时写入记录。对于每一个可能发生故障的时刻,为了找到所有可能未完成的事务,我们需要在日志中回溯多远。请考

24、虑记录在崩溃发生以前写入和未写入的两种情况。a) 记录可以在之后任意位置出现。当前活跃的事务只有S。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定没有已提交的事务。b) 记录可以在之后任意位置出现。当前活跃的事务只有T。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务只有S。c

25、) 记录可以在之后任意位置出现。当前活跃的事务有T和U。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务只有S。d) 记录可以在之后任意位置出现。当前活跃的事务有T、U和V。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务只有S。e) 记录可以在之后任意位置出现。当前

26、活跃的事务有T和V。如果崩溃发生在记录之后,那么在日志中只要回溯到。如果崩溃发生在记录之前,我们必须向后搜索到倒数第二个START CKPT记录并得到其活跃事务列表。在本题中没有前一检查点,因而必须一直走到日志的开头,确定已提交的事务有S和U。习题6.5.1 如果在例6.14和例6.15中使用的是redo日志而不是undo/redo日志,那么:a) 日志会是怎样的?Dump completesb) 如果我们需要使用备份以及这一日志进行恢复,T1未提交的后果是什么?在T1提交之前转储已经完成,对于未提交事务T1,它所做的修改不能到达磁盘。也就是说,A和B不能变到新值。c) 恢复后数据库的状态是什

27、么?数据库元素A、B、C、和D分别是(1,2,6,4)习题7.1.1 航班预订系统执行的一个事务T1执行以下步骤:. 询问顾客希望的航班时间和城市。所需航班信息位于数据库元素(可能是磁盘块)A和B中,系统在磁盘上检索所需信息。. 告诉顾客供选择的选项,顾客选择一个航班,该航班的数据在B中,包括该航班的预订号。为该顾客预订该航班。. 顾客为该航班选择一个座位;该航班的座位信息位于数据库元素C中。. 系统获得顾客的信用卡号,并将该航班的账单附加到数据库元素D的账单列表上。. 顾客的电话和航班数据被加到数据库元素E上的另一个列表中,这是为了向顾客发确认航班的传真。将事务T1表示为r和w动作的一个序列

28、。r1(A); r1(B); w1(B); r1(C); w1(C); r1(D); w1(D); r1(E); w1(E).习题7.2.1 下面是用对数据库元素A和B的影响来描述的两个事务,我们可以假设数据库元素A和B是整数。T1:READ(A,t); t:=t+2; WRITE(A,t); READ(B,t); t:=t*3; WRITE(B,t);T2:READ(B,s); s:=s*2; WRITE(B,s); READ(A,s); s:=s+3; WRITE(A,s);我们假设不管数据库上的一致性约束是什么,这些事务在隔离的情况下能够保持这些约束。注意,A=B不是一致性约束。a)给出

29、上面12个动作的一个串行调度的例子和一个非串行调度的例子。b)这12个动作共有多少串行调度?c)这12个动作共有多少可串行化调度?d)这两个串行顺序对数据库的影响是相同的,即(T1,T2)和(T2,T1)等价。通过给出任意数据库初态时这两个事务的结果,说明这一事实。a)串行调度的例子T1T2ABREAD(A,t)1015t:=t+2WRITE(A,t)12READ(B,t)t:=t*3WRITE(B,t)45READ(B,s)s:=s*2WRITE(B,s)90READ(A,s)s:=s+3WRITE(A,s)15非串行调度的例子T1T2READ(A,t)t:=t+2WRITE(A,t)REA

30、D(B,s)s:=s*2WRITE(B,s)READ(B,t)t:=t*3WRITE(B,t)READ(A,s)s:=s+3WRITE(A,s)b)这12个动作共有2种串行调度,即(T1,T2)和(T2,T1)。c)如果一事务先读A,则写操作必须在另一事务读A之前完成。对B也一样。1、 如果T1先读A和B,则写操作也要在T2之前完成,也就是说T2只能在T1之后操作。由于T1和T2中的每一个动作都要保持自身定义中出现的顺序,所以这种情况下只有一个冲突可串行化调度。2、 如果T2先读A和B,同1中可知这种情况下也只有一个冲突可串行化调度。3、 如果T1先读B,接着T2读A,这种情况不会出现。4、

31、如果T1先读A,接着T2读B,Now, the first three steps of each transaction may interleave in any way, and the last three of each may interleave in any way, but the two groups of six actions must not interleave. The crucial observation is that the fourth step of each transaction (their second reads) must follow t

32、he third step of each transaction (their first writes), either to avoid reading A or B before it is written, or because actions of the same transaction cannot be reordered. The number of serializable orders of this type is (6 choose 3)*(6 choose 3) = 20*20 = 400. The total number of serial orders is

33、 thus 402. d) 假设初始A=10,B=15,则(T1,T2)的结果如a)中所示。下面是(T2,T1)的结果。T1T2ABREAD(B,s)1015s:=s*2WRITE(B,s)30READ(A,s)s:=s+3WRITE(A,s)13READ(A,t)t:=t+2WRITE(A,t)15READ(B,t)t:=t*3WRITE(B,t)90对比可知,最后结果一致,均是A=15,B=90习题7.2.5 对以下的每一个调度:a) w3(A);r1(A); w1(B);r2(B); w2(C);r3(C);b) r1(A); r2(A);w1(B); w2(B);r1(B); r2(B

34、); w2(C); w1(D);c) r1(A); r2(A);r1(B); r2(B);r3(A); r4(B); w1(A); w2(B);d) r1(A); r2(A);r3(B);w1(A);r2(C); r2(B); w2(B); w1(C);e) r1(A); w1(B); r2(B);w2(C); r3(C); w3(A);回答如下问题:. 调度的优先图是什么?. 调度是冲突可串行化的吗?如果是,等价的串行调度有哪些?. 是否有等价的调度(不管事务对数据做什么),但又不是冲突等价的?a)优先图是 T1 - T2 - T3该图有环,所以调度不是冲突可串行化的。没有等价且不为冲突等价

35、的调度。假设A, B和 C 的初值都为10,T3将A置为A+C,T2将C设为B+C,T1是将B设为A+B。如果T1不优先于T2,那么C的赋值将出错。如果T2不优先于T3,那么A的赋值将出错。如果T3不优先于T1,那么B的赋值将出错。b)优先图是 T1 - T2该图有环,所以调度不是冲突可串行化的。假设A, B,C和 D 的初值都为10,T1将B置为A+B,D置为20,T2 也将B置为A+B,C置为20。调度(T1, T2)和(T2, T1)是等价的。c)优先图(precedence graph)是 T3 - T1 - T2 T2 - T1该图是无环的,所以调度是冲突可串行化的。等价的串行调度只

36、有(T3, T2, T1)没有等价且不为冲突等价的调度。假设A, B和 C 的初值都为10,T1将A和C置为20,T2将B设为A+B+C,T3是打印B。如果T3不优先于T2,则T3打印出来B的值是错误的。如果T2不优先于T1,则它对B的赋值就出错了。e)优先图是 T1 - T2 - T3该图无环,所以调度是冲突可串行化的。等价的串行调度只有(T1, T2, T3)。没有等价且不为冲突等价的调度。假设A, B和 C 的初值都为10,T3将A置为A+C,T2将C设为B+C,T1是将B设为A+B。如果T1不优先于T2,那么C的赋值将出错。如果T2不优先于T3,那么A的赋值将出错。如果T1不优先于T3

37、,那么B的赋值将出错。习题7.3.1 下面是两个事务,其中给出了封锁请求和事务的语义。回忆一下习题7.2.1中,这些事务具有特殊的性质,即它们被调度的方式可以是非冲突可串行化的,但由于其语义又是可串行化的。下面的问题中,只考虑读写动作的调度,而不要考虑封锁、解锁或赋值步骤。a) 给出被锁禁止的调度的一个例子。r1(A); r2(B); w2(B); r2(A); w1(A); r1(B); w1(B); w2(A)习题7.3.3 对于习题7.2.5种的每个调度,假设每个事务刚好在读或写每个数据库元素以前获得该元素上的锁,并且每个事务在最后一次访问一个元素后立即释放其锁。说一说封锁调度器对这些调

38、度中的每一个会怎么做;即哪些请求将被推迟,而什么时候它们又将被允许继续?a)没有操作被推迟,调度顺序为w3(A);r1(A); w1(B);r2(B); w2(C);r3(C);b) 请求r1(B)将被推迟,因为T1对数据库元素B加锁了,等到r1(B),之后T1将释放B上的锁,这时候r1(B)将被允许继续。调度顺序为:r1(A); r2(A);w1(B); r1(B);w2(B); r2(B); w2(C); w1(D);c) 请求r2(A)将被推迟,因为T1对数据库元素A加锁了,等到w1(A),之后T1将释放A上的锁,这时候r2(A)将被允许继续。同样请求r3(A)也将被推迟,因为T1对数据

39、库元素A加锁了,T1解锁之后有T2对A加锁,等到r2(A),之后T2将释放A上的锁,这时候r3(A)将被允许继续。另外r4(B)也被推迟,要在w2(B)之后才将被允许继续。调度顺序为:r1(A); r1(B);w1(A); r2(A); r2(B);r3(A); w2(B); r4(B); d) 请求r2(A)将被推迟,因为T1对数据库元素A加锁了,等到w1(A),之后T1将释放A上的锁,这时候r2(A)将被允许继续。调度顺序为: r1(A); r3(B); w1(A); r2(A); r2(C); r2(B); w2(B); w1(C). e) 没有操作被推迟,调度顺序为r1(A); w1(

40、B); r2(B);w2(C); r3(C); w3(A);习题7.4.1 对下面事务T1、T2和T3 的每一个调度:a)r1(A);r2(B);r3(C);w1(B);w2(C);w3(A);b)r1(A);r2(B);r3(C); r1(B);r2(C);r3(D);w1(C);w2(D);w3(E);做以下各件事情:a) (i): sl1(A); r1(A); sl2(B); r2(B); sl3(C); r3(C); xl1(B); w1(B); u1(A); u1(B); xl2(C); w2(C); u2(B); u2(C); xl3(A); w3(A); u3(C); u3(A)

41、;(ii): 前面3个加锁和读操作是正确的,但 xl1(B)和xl2(C)操作被推迟,在B存在共享锁的情况下T1不能再加排它锁,同理在C存在共享锁的情况下T2不能再加排它锁。出现死锁现象。如果要执行w1(B),则需在T2事务完成后;但T2事务完成的前提是w2(C)要执行完,这一操作要求之前T3要对C解锁;T3要对C解锁的话则w3(A)要执行完,这一操作要求之前T1要对A解锁,T1要对A解锁的话则w1(B)要执行完,陷入死循环。(iii): sl1(A); r1(A); sl2(B); r2(B); sl3(C); r3(C); xl1(B); w1(B); u1(A); u1(B); xl2(

42、C); w2(C); u2(B); u2(C); xl3(A); w3(A); u3(C); u3(A);(iv): 前面3个加锁和读操作是正确的,但 xl1(B)和xl2(C)操作被推迟,在B存在共享锁的情况下T1不能再加排它锁,同理在C存在共享锁的情况下T2不能再加排它锁。出现死锁现象。如果要执行w1(B),则需在T2事务完成后;但T2事务完成的前提是w2(C)要执行完,这一操作要求之前T3要对C解锁;T3要对C解锁的话则w3(A)要执行完,这一操作要求之前T1要对A解锁,T1要对A解锁的话则w1(B)要执行完,陷入死循环。(v): sl1(A); r1(A); sl2(B); r2(B)

43、; sl3(C); r3(C); ul1(B); xl1(B); w1(B); u1(A); u1(B); ul2(C); xl2(C); w2(C); u2(B); u2(C); ul3(A); xl3(A); w3(A); u3(C); u3(A);(vi): 前面3个加锁和读操作是正确的,但 xl1(B)和xl2(C)操作被推迟,在B存在共享锁的情况下T1不能再加排它锁,同理在C存在共享锁的情况下T2不能再加排它锁。出现死锁现象。如果要执行w1(B),则需在T2事务完成后;但T2事务完成的前提是w2(C)要执行完,这一操作要求之前T3要对C解锁;T3要对C解锁的话则w3(A)要执行完,这

44、一操作要求之前T1要对A解锁,T1要对A解锁的话则w1(B)要执行完,陷入死循环。b)(i): sl1(A); r1(A); sl2(B); r2(B); sl3(C); r3(C); sl1(B); r1(B); sl2(C); r2(C); sl3(D); r3(D); xl1(C); w1(C); u1(A); u1(B);u1(C); xl2(D); w2(D); u2(B); u2(C); u2(D);xl3(E); w3(E); u3(C); u3(D); u3(E);(ii): 前面6个加锁和读操作是正确的,但xl1(C)和xl2(D)操作被推迟,在C存在共享锁的情况下T1不能再

45、加排它锁,同理在D存在共享锁的情况下T2不能再加排它锁。先执行T3事务,w3(E),T3执行完成后释放它在C、D、E上的锁;由于还有事务T2在C上加了共享锁,所以xl1(C)操作依然被推迟,于是先执行T2事务,w2(D),执行完成后T2释放在B、C、D上的锁,这时候T1就可以执行了,w1(C),执行完成后释放A、B、C上的锁。(iii): sl1(A); r1(A); sl2(B); r2(B); sl3(C); r3(C); sl1(B); r1(B); sl2(C); r2(C); sl3(D); r3(D); xl1(C); w1(C); u1(A); u1(B);u1(C); xl2(

46、D); w2(D); u2(B); u2(C); u2(D);xl3(E); w3(E); u3(C); u3(D); u3(E);(iv): 前面6个加锁和读操作是正确的,但xl1(C)和xl2(D)操作被推迟,在C存在共享锁的情况下T1不能再加排它锁,同理在D存在共享锁的情况下T2不能再加排它锁。先执行T3事务,w3(E),T3执行完成后释放它在C、D、E上的锁;由于还有事务T2在C上加了共享锁,所以xl1(C)操作依然被推迟,于是先执行T2事务,w2(D),执行完成后T2释放在B、C、D上的锁,这时候T1就可以执行了,w1(C),执行完成后释放A、B、C上的锁。(v): sl1(A);

47、r1(A); sl2(B); r2(B); sl3(C); r3(C); sl1(B); r1(B); sl2(C); r2(C); sl3(D); r3(D); ul1(C); xl1(C); w1(C); u1(A); u1(B);u1(C); ul2(D); xl2(D); w2(D); u2(B); u2(C); u2(D); ul3(E); xl3(E); w3(E); u3(C); u3(D); u3(E);(vi): 前面6个加锁和读操作是正确的,但xl1(C)和xl2(D)操作被推迟,在C存在共享锁的情况下T1不能再加排它锁,同理在D存在共享锁的情况下T2不能再加排它锁。先执行T3事务,w3(E),T3执行完成后释放它在C、D、E上的锁;由于还有事务T2在C上加了共享锁,所以xl1(C)操作依然被推迟,于是先执行T2事务,w2(D),执行完成后T2释放在B、C、D上的锁,这时候

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论