作者:非妃是公主
专栏:《数据库》
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩
专栏系列文章
第2章
6.
第3章
4.
5.
9.
第6章
5.
6.
7.
第7章
7.
8.
9.
10.
11.
第9章
2、
(1)需要对R进行全表扫描
块数
=
20000
40
=
50
块数 = \frac{20000}{40}=50
块数=4020000=50
(2)对R进行索引扫描 , 块数=3+1 =4;其中前3块为B+树索引块,第4 为块数据块。(前3块装指针,后面一块装相应指针指向的数据)
(3)R总共需要
20000
40
=
500
\frac{20 000}{40}=500
4020000=500次,S总共需要
1200
30
=
40
\frac{1200}{30}=40
301200=40次,以R为外表,假设内存可分配的块数为K块,那么
磁盘块读写次数
=
500
+
⌈
40
k
−
1
⌉
×
500
磁盘块读写次数=500+\lceil\frac{40}{k-1}\rceil\times500
磁盘块读写次数=500+⌈k−140⌉×500
(4)
- R与S在B属性上有序
硬盘读写次数 = 500 + 40 = 540 ; 硬盘读写次数=500+40=540; 硬盘读写次数=500+40=540;
- R与S在B属性上无序,还要加上两个关系在B属性上排序的代价(一般排序算法的时间复杂度为( n log 2 n n\log_2{n} nlog2n),其中,n为排序规模)
硬盘读写次数 = 540 + 2 × 500 × l o g 2 500 + 2 × 40 × log 2 40 。 硬盘读写次数=540+2\times500\times log_2{500} +2\times40\times\log_2{40}。 硬盘读写次数=540+2×500×log2500+2×40×log240。
3、
4、
(1)对teacher进行全表扫描,查看元组是否满足性别为女。
(2)通过索引找到Dno=301
的索引项 ,然后顺着B+树的顺序集得到Dno< 301
的索引项 ,通过这些指针找到Department中的元组;
(3)对work
进行全表扫描 ,查看元组是否满足year<>2000
。
(4)通过year的索引找到满足Year=2000
的索引项,然后顺着B+数的顺序集得到Year>2000
的索引项,通过这些指针找到Year>2000
的元组,检查这些元组是否满足salary< 5000
。
(5)对Work
进行全表扫描,查看元组是否满足Year<2000
或Salary< 5000
。
5、
第10章
4、
① 重做:T1 、T3;回滚 : T2 、T4。
② 重做:T1,回滚: T2 、 T3。
③ 重做:T1,回滚: T2 、 T3。
④ 重做:T1,回滚:T2。
说明:已经提交的事项要重做,还未提交的事项要回滚,判断重做还是回滚的依据就是事项是否提交。
5、
① 系统故障发生在14之后:A:8; B:7; C:11;
② 系统故障发生在12之后:A:10; B:0; C:11;
③ 系统故障发生在10之后:A:10; B:0; C:11;
④ 系统故障发生在9之后:A:10; B:0; C:11;
⑤ 系统故障发生在7之后:A:10; B:0; C:11;
⑥ 系统故障发生在5之后:A:0; B:0; C:0;
说明:已经提交的事项对数据库的修改才会写入到磁盘上,没有提交的事项所做的更改暂时无效。
第11章
9.
(1)串行执行次序有
T
1
,
T
2
,
T
3
;
T
1
,
T
3
,
T
2
;
T
2
,
T
1
,
T
3
;
T
2
,
T
3
,
T
1
;
T
3
,
T
1
,
T
2
;
T
3
,
T
2
,
T
1
;
T_1,T_2,T_3; T_1,T_3,T_2; T_2,T_1,T_3; T_2,T_3,T_1; T_3,T_1,T_2; T_3,T_2,T_1;
T1,T2,T3;T1,T3,T2;T2,T1,T3;T2,T3,T1;T3,T1,T2;T3,T2,T1;
说明:排列问题
(2)
说明:交换过程重没有涉及到对同一数据类型读写操作和写写操作的交换
(3)
说明:交换过程中涉及到对同一数据的读写操作或写写操作的交换
(4)
(5)
10.
是冲突可串行化的调度,交换 r 1 ( A ) r_1(A) r1(A)与 w 3 ( B ) r 2 ( B ) r 2 ( A ) w 2 ( B ) w_3(B)r_2(B)r_2(A)w_2(B) w3(B)r2(B)r2(A)w2(B)后,得到的事务调度序列是串行的。且期间没有交换对同一数据的读写操作或者写写操作。
11.
假设它不是可串化的,
那么事务序列重必然存在对同一数据类型的读写,或者写写操作在不同事务间交叉进行,
即:两个事务交替使用同一数据类型—>必须存在一个事务先解锁后加锁的情况
与事务并发处理采用两段锁协议相矛盾。
所以它是不可串化的。
13.
③遵循两阶段封锁(2PL)的调度 ⊆ \subseteq ⊆①正确的调度 = = =②可串行化的调度
④串行调度 ⊆ \subseteq ⊆①正确的词度
说明:可串行化的调度都是正确的调度,二者范围相同
两阶段锁协议是可串行化调度的充分不必要条件(两阶段锁协议包含两部分:可串行化的调度和死锁的调度)
串行调度是指各事务操作没有交叉。
14.
(1)
T 1 T_1 T1 | T 2 T_2 T2 |
---|---|
SlockA | SlockB |
R(A) | R(B) |
XlockB | XlockA |
R(B) | R(A) |
B=A+B | A=A+B |
W(B) | W(A) |
unlockA | unlockB |
unlockB | unlockA |
(2)会发生死锁,如下调度:
T 1 T_1 T1 | T 2 T_2 T2 |
---|---|
XlockA | |
R(A) | |
XlockB | |
R(B) | |
waiting… | waiting… |
如果想不发生死锁,只能串行调度(先执行更多操作 T 1 T_1 T1,再执行更多操作 T 2 T_2 T2,或者反之)。