Проверяемый текст
(Диссертация 2004)
[стр. 73]

Таблица 2.3 Транзакция А Чтение Р=Р„ t, t2 Чтение Р=Р0 t3 Запись Р—>Р t4 Фиксация транзакции Время Транзакция В Повторное чтение Р=Р( t5 Фиксация транзакции t6 Неповторяемое считывание Фиктивные элементы (фантомы).
Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций чтение одновременно нескольких строк, удовлетворяющих некоторому условию.
Транзакция
«А» дважды выполняет выборку строк с одним и тем же условием.
Между выборками вклинивается транзакция
«В», которая добавляет новую строку, удовлетворяющую условию отбора.
Транзакция
«А» ничего не знает о существовании транзакции «В», и, т.к.
сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки
(табл.
2.4).
Результат.
Транзакция «А» в двух одинаковых выборках строк получила разные результаты.
Таблица 2.4 Транзакция А Время Транзакция В Выборка строк, удовлетворяющих tj условию а.
(Отобрано п строк) 12 Вставка новой строки, удовлетворяющей условию а.
t3 Фиксация транзакции Выборка строк, удовлетворяющих t4 условию а.
(Отобрано п+1 строк) Фиксация транзакции 73
[стр. 154]

Транзакция A ничего не знает о существовании транзакции B, и, т.к.
сама она не меняет значение в строке, то ожидает, что после повторного чтения значение будет тем же самым.
Результат.
Транзакция A работает с данными, которые, с точки зрения транзакции A, самопроизвольно изменяются.
Фиктивные элементы (фантомы) Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций чтение одновременно нескольких строк, удовлетворяющих некоторому условию.
Транзакция
A дважды выполняет выборку строк с одним и тем же условием.
Между выборками вклинивается транзакция
B, которая добавляет новую строку, удовлетворяющую условию отбора.
Транзакция
A Время Транзакция B Выборка строк, удовлетворяющих условию .
(Отобрано n строк) ----Вставка новой строки, удовлетворяющей условию .
--Фиксация транзакции Выборка строк, удовлетворяющих
условию .
(Отобрано n+1 строк) --Фиксация транзакции --Появились строки, которых раньше не было Транзакция A ничего не знает о существовании транзакции B, и, т.к.
сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки.

Результат.
Транзакция A в двух одинаковых выборках строк получила разные результаты.
Собственно несовместимый анализ Эффект собственно несовместимого анализа также отличается от предыдущих примеров тем, что в смеси присутствуют две транзакции одна длинная, другая короткая.
Длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера.
Пусть на всех счетах находятся одинаковые суммы, например, по $100.
Короткая транзакция в этот момент выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется.
Транзакция A Время Транзакция B Чтение счета и суммирование.
----Снятие денег со счета .


[стр.,160]

S-блокировка успешна --Чтение --Работа с прочитанными данными ------Фиксация транзакции --Все правильно Результат.
Транзакция A притормозилась до окончания (отката) транзакции B.
После этого транзакция A продолжила работу в обычном режиме и работала с правильными данными.
Конфликт разрешен за счет некоторого увеличения времени работы транзакции A (потрачено время на ожидание снятия блокировки транзакцией B).
Проблема несовместимого анализа Неповторяемое считывание Транзакция A дважды читает одну и ту же строку.
Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.
Транзакция A Время Транзакция B S-блокировка успешна --Чтение ----X-блокировка отвергается --Ожидание… Повторное чтение Ожидание… Фиксация транзакции (Блокировка снимается) Ожидание… --X-блокировка успешна --Запись --Фиксация транзакции (Блокировка снимается) Все правильно Результат.
Транзакция B притормозилась до окончания транзакции A.
В результате транзакция A дважды читает одни и те же данные правильно.
После окончания транзакции A, транзакция B продолжила работу в обычном режиме.
Фиктивные элементы (фантомы) Транзакция A дважды выполняет выборку строк с одним и тем же условием.
Между выборками вклинивается транзакция
B, которая добавляет новую строку, удовлетворяющую условию отбора.


[стр.,165]

4.
Прежде чем транзакция наложит X-, IXили SIX-блокировку на заданный объект, она должна задать IX-блокировку (или более сильную) для всех родительских объектов этого объекта.
5.
Прежде чем для данной транзакции будет отменена блокировка для данного объекта, должны быть отменены все блокировки для дочерних объектов этого объекта.
Понятие относительной силы блокировок можно описать при помощи следующей диаграммы приоритета (сверху более сильные блокировки, снизу более слабые): Таблица 3 Диаграмма приоритета блокировок Замечание.
Протокол преднамеренных блокировок не определяет однозначно, какие блокировки должны быть наложены на родительский объект при блокировании дочернего объекта.
Например, при намерении задать S-блокировку строки таблицы, на таблицу, включающую эту строку, можно наложить любую из блокировок типа IS, S, IX, SIX, X.
При намерении задать X-блокировку строки, на таблицу можно наложить любую из блокировок типа IX, SIX, X.
Посмотрим, как разрешается проблема фиктивных элементов (фантомов) с использованием протокола преднамеренных блокировок для доступа к данным.
Транзакция A дважды выполняет выборку строк с одним и тем же условием.
Между выборками вклинивается транзакция
B, которая добавляет новую строку, удовлетворяющую условию отбора.
Транзакция
B перед попыткой вставить новую строку должна наложить на таблицу IXблокировку, или более сильную (SIX или X).
Тогда транзакция A, для предотвращения возможного конфликта, должна наложить такую блокировку на таблицу, которая не позволила бы транзакции B наложить IX-блокировку.
По таблице совместимости блокировок определяем, что транзакция A должна наложить на таблицу S, или SIX, или X-блокировку.
(Блокировки IS недостаточно, т.к.
эта блокировка позволяет транзакции B наложить IX-блокировку для последующей вставки строк).
Транзакция A Время Транзакция B S-блокировка таблицы (с целью потом блокировать строки) успешна --S-блокировка строк, удовлетворяющих условию .
(Заблокировано n строк) --Выборка строк, удовлетворяющих условию .
--

[Back]