Вариант решения задания №6

advertisement
Вариант решения к домашнему заданию 6.
Задача 1 (25 очков)
Используем знак ‘<’ для указания предшествования действий, La < Lb ознаяает, что La
происходит раньше Lb.
Для краткости обозначим Lx = Log(X) и Wx = Write(X), где X=A,B,C,D.
Первое условие определяет порядок действий в протоколе Log :
<START>; La < Lb < Lc < Ld ; <COMMIT T>
второе, что Wa может быть в двух местах: между La и Lb, или между Lb и Lc, последнее
условие - что Wb может быть в двух местах: между Lb и Lc и между Lc и Ld. Ясно, что
Wd может стоять только между Ld и COMMIT, и Wc может быть между Lc и Ld или
между Ld и COMMIT. В силу протокола-возврата все Ws должны быть раньше COMMIT.
Перечислим все последовательности, помещая их вначале в самое левое возможное место
и меняя чаще место для Wc, затем - для Wb, и наконец - для Wa (всего 17
последовательностей):
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
<START>; La
< Wa < Lb < Wb < Lc < Wc < Ld < Wd ; <COMMIT T>
< Wa < Lb < Wb < Lc < Ld < Wc < Wd ; <COMMIT T>
< Wa < Lb < Wb < Lc < Ld < Wd < Wc ; <COMMIT T>
< Wa < Lb < Lc < Wc <Wb < Ld < Wd ; <COMMIT T>
< Wa < Lb < Lc < Wb <Wc < Ld < Wd ; <COMMIT T>
< Wa < Lb < Lc < Wb < Ld < Wc < Wd ; <COMMIT T>
< Wa < Lb < Lc < Wb < Ld < Wd < Wc ; <COMMIT T>
< Lb < Wb < Wa < Lc < Wc < Ld < Wd ; <COMMIT T>
< Lb < Wb < Wa < Lc < Ld < Wc < Wd ; <COMMIT T>
< Lb < Wb < Wa < Lc < Ld < Wd < Wc; <COMMIT T>
< Lb < Wa < Wb < Lc < Wc < Ld < Wd ; <COMMIT T>
< Lb < Wa < Wb < Lc < Ld < Wc < Wd ; <COMMIT T>
< Lb < Wa < Wb < Lc < Ld < Wd < Wc; <COMMIT T>
< Lb < Wa < Lc < Wc < Wb < Ld < Wd ; <COMMIT T>
< Lb < Wa < Lc < Wb < Wc < Ld < Wd ; <COMMIT T>
< Lb < Wa < Lc < Wb < Ld < Wc < Wd ; <COMMIT T>
< Lb < Wa < Lc < Wb < Ld < Wd < Wc ; <COMMIT T>
Задача 2 (30 очков)
a). Идем от коца протокола. Первая запись <START U>. Поскольку не было <COMMIT
U>, это – незавершенная транзакция, мы должны записать <ABORT U> в протокол и
обновить его на диске. Така как для этой транзакции не было изменения значений, для нее
больше ничего не нужно. Затем мы встречаем запись <T, A, 10>. Така как не было записи
<COMMIT T>, T – незавершенная транзакция. Мы должны изменить значение атрибута A
на 10 в БД. Последняя запись для просмотра <START T>. Это незавершенная транзакция.
Мы должны записать в протокол <ABORT T> и обновить его на диске.
b). Начинаем с записи <T, E, 50>. Поскольку не было <COMMIT T>, это – незавершенная
транзакция. Мы должны изменить значение атрибута Е на 50 в БД. Следующая запись
<COMMIT U>. U – завершенная транзакция, никаких действий не требуется. Следующая
запись <U, D, 40>. U – завершенная транзакция, никаких действий не требуется.
Следующая запись <T, C, 30>. T – незавершенная транзакция. Мы должны изменить
значение атрибута С на 30 в БД. Следующая запись <U, B, 20>. U – завершенная
транзакция, никаких действий не требуется, то же и для следующей записи <START U>.
Следующая запись <T, A, 10>. T – незавершенная транзакция. Мы должны изменить
значение атрибута А на 10 в БД. Последняя запись для просмотра <START T>. Это
незавершенная транзакция. Мы должны записать в протокол <ABORT T> и обновить его
на диске.
c). Первая запись <COMMIT T>. Т – завершенная транзакция, все другие записи для этой
транзакции могут быть проигнорированы. Следующая запись <T, E, 50> - игнорируется.
Следующая запись - <COMMIT U>. U – завершенная транзакция, все другие записи для
этой транзакции могут быть проигнорированы. До начала протокола мы видим только
записи для транзакций T и U, которые могут быть проигнорированы. Нет необходимости в
изменениях БД.
Задача 3 (25 очков)
Используем те же обозначения, что и в задаче 1.
Первое условие определяет порядок действий в протоколе Log:
<START>; La < Lb < Lc < Ld ; <COMMIT T>
Второе условие требует, чтобы Wa было раньше Wc. Третье условие выполняется из-за
первого. Пскольку используется протокол-повтора, все Ws должны быть позже COMMIT.
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wc < Wb < Wd
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wc < Wd < Wb
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wb < Wc < Wd
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wd < Wc < Wb
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wb < Wd < Wc
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wd < Wb < Wb
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wb < Wa < Wc < Wd
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wd < Wa < Wc < Wb
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wb < Wa < Wd < Wc
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wd < Wa < Wb < Wc
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wb < Wd < Wa < Wc
<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wd < Wb < Wa < Wc
Задача 4 (20 очков)
a). T1 – завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности A=50(соответствует записи 2), B=130(запись 4) и
A=70(запись 5) на диск.
T2 - незавершенная транзакция, мы должны отменить ее, записав старые значения в
следующей последовательности D=10(запись 7), C=10 (запись 6) на диск, мы также
должны записать <ABORT T2> в протокол и обновить его на диске.
T3 - незавершенная транзакция. Так как нет записей обновления, мы только должны
записать <ABORT T3> в протокол и обновить его на диске.
b). Поскольку контрольная точка не завершена, мыдолжны просмотреть протокол перед
<START CKPT (T2,T3)>.
T1 – завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности A=50(соответствует записи 2), B=130(запись 4) и
A=70(запись 5) на диск.
T2 – завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности C=20(запись 6), D=30(запись 7), D=40(запись 11), C=70
(запись 13) на диск.
T3 - незавершенная транзакция, мы должны отменить ее, записав старое значение
E=10(запись 10). Мы также должны записать <ABORT T3> в протокол и обновить его на
диске.
c). То же, что в b) плюс
T4 - незавершенная транзакция. Так как нет записей обновления, мы только должны
записать <ABORT T4> в протокол и обновить его на диске.
d). Поскольку контрольная точка не завершена, мы должны просмотреть протокол перед
<START CKPT (T2,T3)>.
T1 – завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности A=50(соответствует записи 2), B=130(запись 4) и
A=70(запись 5) на диск.
T2 – завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности C=20(запись 6), D=30(запись 7), D=40(запись 11), C=70
(запись 13) на диск.
Т3 - завершенная транзакция, мы должны повторить ее, записав новое значение E=60
(запись 10).
T4 - незавершенная транзакция, мы должны отменить ее, записав старые значения в
следующей последовательности G=10 (запись 17), F=10 (запись 16). Мы также должны
записать <ABORT T4> в протокол и обновить его на диске.
e). Поскольку контрольная точка завершена, и T1 была завершена перед ее началом, мы не
должны ничего делать с T1. Мы должны повторить T2 и T3 но не должны просматривать
протокол перед <START CKPT (T2,T3)> для T2 поскольку все обновления T2 перед
началом контрольной точки были помещены на диск до ее окончания (контр.точки).
T2 завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности D=40(запись 11), C=70 (запись 13) на диск.
Т3 - завершенная транзакция, мы должны повторить ее, записав новое значение E=60
(запись 10).
T4 незавершенная транзакция, мы должны отменить ее, записав старые значения в
следующей последовательности F=150 (запись 21), F=100 (запись 19), G=10 (запись 17),
F=10 запись 16). Мы также должны записать <ABORT T4> в протокол и обновить его на
диске.
f). Поскольку контрольная точка завершена, и T1 была завершена перед ее началом, мы не
должны ничего делать с T1. Мы должны повторить T2,Т3 и T4 но не должны
просматривать протокол перед <START CKPT (T2,T3)> для T2 поскольку все обновления
T2 перед началом контрольной точки были помещены на диск до окончания контр.точки.
T2 - завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности D=40(запись 11), C=70 (запись 13) на диск.
Т3 - завершенная транзакция, мы должны повторить ее, записав новое значение E=60
(запись 10).
T4 - завершенная транзакция, мы должны повторить ее, записав новые значения в
следующей последовательности F=100 (запись 16), G=110 (запись 17), F=150 (запись 19),
F=140 (запись 21).
Результаты могут быть сведены в таблицу
a
b
c
d
e
f
A
B
C
D
E
F
G
70
70
70
70
70
70
130
130
130
130
130
130
10
70
70
70
70
70
10
40
40
40
40
40
10
10
10
60
60
60
10
10
10
10
10
140
10
10
10
10
10
110
Download