我有一个崩溃点的日志:
1 <start T1>
2 <T1, D, 20>
3 <commit T1>
4 <start T4>
5 <T4, B, 15>
6 <T4, A, 20>
7 <commit T4>
8 <start T2>
9 <T2, B, 12>
10 <start T3>
11 <T3, A, 30>
12 <T2, D, 25>
<- system crash问题是: 1)在(内存中)写入以下日志记录之一后,我们立即开始一个非静态检查点:
a) 2 <T1, D, 20>
b) 5 <T4, B, 15>
c) 9 <T2, B, 12>
d) 11 <T3, A, 30>
2)我们必须在日志中查找多长时间才能找到所有可能的未完成事务。恢复后,T1、T2、T3和T4写入的值是什么?
在1a中,我能够将<end ckpt>放在<Commit T1>行之后。
在1b中,我能够将<end ckpt>放在<Commit T2>行之后。
但是,系统没有提交T2和T3就崩溃了,我怎么解决1c和1d呢?
此外,我不知道问题2中的“回到多远”是什么意思。你能给我一个解决这个问题的方法吗?
发布于 2018-08-06 17:32:46
“后退多远”意味着当你向后扫描时,哪一行足以让你停止更多的扫描。每个问题都应该考虑撤消和重做两种情况。在撤消情况下,我们不能在问题1c和1d处插入,因为T2和T3未提交。在重做情况下,插入的时间取决于T1和T4写入的数据到达磁盘的时间。另外,这是一个叫HW04的家庭作业吗?
https://stackoverflow.com/questions/51665053
复制相似问题