Тема 11. Дополнительные вопросы обработки транзакций. «Грязные» данные. T1 T2 A 25 l1(A); r1(A); A= A+100 w1(A); l1(B); u1(A); B 25 125 l2(A); r2(A); A = A*2; w2(A); l2(B); Отложено 250 r1(B); Отменена; u1(B). l2(B); u2(A); r2(B); B = B*2; w2(B); u2(B); 50 Каскадный откат – отмена всех транзакций, считывающих элементы, записанные отмененными транзакциями. Расписание является восстанавливаемым, если каждая транзакция T завершается только после того, как завершаются все транзакции, записывающие элементы, читаемые транзакцией T. Пусть ci - действие по завершению транзакции. S1: w1(A); w1(B); w2(A); r2(B); c1; c2 – восстанавливаемое и упорядоченное; S2: w2(A); w1(B); w1(A); r2(B); c1; c2 – восстанавливаемое, но неупорядочиваемое; S3: w1(A); w1(B); w2(A); r2(B); c2; c1 – упорядоченное, но невосстанавливаемое. Расписание избегает каскадных откатов (ИКО), если транзакция может прочитать только значения, которые записаны завершенными транзакциями. S4: w1(A); w1(B); w2(A); c1; r2(B); c2 – восстанавливаемое и ИКО - расписание. Правило строгих блокировок: Транзакции должны удерживать любую исключительную блокировку (или блокировку приращения), пока транзакция не будет либо отменена, либо завершена, и запись протокола об этом не достигнет диска. Расписание, которое удовлетворяет правилу строгих блокировок, называется строгим расписанием. Упорядочиваемые Упорядоченные Строгие ИКО Восстанавливаемые Видимая упорядочиваемость. Пусть существуют гипотетические транзакции: T0 – записывает все элементы, которые считываются транзакцией расписания; Tf – считывает каждый элемент, записываемый какой-либо транзакцией расписания. Для каждого действия ri(A), мы можем найти действие wj(A), которое предшествует действию на чтение элемента. Транзакцию Tj назовем источником действия чтения ri(A). Два расписания являются видимо-эквивалентными, если для каждого действия считывания в одном из расписаний, его источник тот же самый в обоих расписаниях. Если расписание S является видимо-эквивалентным некоторому упорядоченному расписанию, расписание S является видимо-упорядочиваемым. Пример. S: r2(B); w2(A); r1(A); r3(A); w1(B); w2(B); w3(B). Полиграф. A T0 A T1 B T2 T3 B Tf A Окончательный полиграф. T0 T1 T2 T3 Tf S: r2(A); r1(A); w1(C); r3(C); w1(B); r4(B); w3(A); r4(C); w2(D); r2(B); w4(A); w4(B). C B,C A Т0 B Т1 A C Т2 A, B Т3 Т4 D Тf Окончательный полиграф Т0 Т1 Т2 Т3 Т4 Тf Распознавание тупиков. Пример. T1: l1(A); r1(A); l1(B); w1(B); u1(A); u1(B). T2: l2(C); r2(C); l2(A); w2(A); u2(C); u2(A). T3: l3(B); r3(B); l3(C); w3(C); u3(B); u3(C). T4: l4(D); r4(D); l4(A); w4(A); u4(D); u4(A). Т1 l1(A); r1(A); Т2 Т3 Т4 l2(C); r2(C); l3(B); r3(B); l4(D); r4(D); l2(A); Отложена l3(C); Отложена l4(A); Отложена l1(B); Отложена Промежуточный граф ожидания после шага 7. 4 3 2 1 После шага 8. 4 3 2 1 После отката транзакции T1. 4 3 2 Упорядочивание элементов. T1: l1(A); r1(A); l1(B); w1(B); u1(A); u1(B). T2: l2(A); l2(C); r2(C); w2(A); u2(C); u2(A). T3: l3(B); r3(B); l3(C); w3(C); u3(B); u3(C). T4: l4(A); l4(D); r4(D); w4(A); u4(D); u4(A). Т1 l1(A); r1(A); Т2 Т3 Т4 l2(A); Отложена l3(B); r3(B); l4(A); Отложена l3(C); w3(C); u3(B); u3(C); l1(B); w1(B); u1(A); u1(B); l2(A); l2(C); r2(C); w2(A); u2(A); u2(C); l4(A); l4(D); r4(D); w4(A); u4(A); u4(D) Установка временных меток. 1. Схема «ждать - умереть»: Если T «старше» U (временная метка для T меньше, чем для U), тогда T позволяется ожидать блокировку, захваченную транзакцией U. Если U «старше» T, то T «умирает», т.е. должен быть произведен откат T. 2. Схема «ранить - жать»: Если T «старше» U, то T «ранит» U. Обычно «ранение» является фатальным: должен быть произведен откат U и предоставление T блокировки, которая требуется. Единственным исключением является ситуация, когда «ранение» U происходит на стадии ее завершения, когда транзакция освобождает захваченные блокировки. Тогда не требуется проводить откат транзакции U. Если U «старше» T, то T позволяется ожидать предоставление блокировки, захваченной транзакцией U. Схема «ждать - умереть». Т1 l1(A); r1(A); Т2 Т3 Т4 l2(A); Откат l3(B); r3(B); l4(A); Откат l3(C); w3(C); u3(B); u3(C); l1(B); w1(B); u1(A); u1(B); l4(A); l4(D); l2(A); Ждет r4(D); w4(A); u4(A); u4(D) l2(A); l2(C); r2(C); w2(A); u2(A); u2(C); Схема «ранить - ждать». Т1 l1(A); r1(A); Т2 Т3 Т4 l2(A); Ждет l3(B); r3(B); l4(A); Ждет Ранена l1(B); w1(B); u1(A); u1(B); l2(A); l2(C); r2(C); w2(A); u2(A); u2(C); l4(A); l4(D); r4(D); w4(A); u4(A); u4(D) l3(B); r3(B); l3(C); w3(C); u3(B); u3(C);