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

Появились строки, которых раньше не было Собственно несовместимый анализ.
Эффект собственно несовместимого анализа также отличается от предыдущих примеров тем, что в смеси присутствуют две транзакции одна длинная, другая короткая.
Длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера.
Пусть на всех счетах находятся одинаковые суммы, например, по $100.
Короткая транзакция в этот момен т выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется
(таблица 2.5).
Таблица 2.5 Транзакция А Время Транзакция В Чтение счета Р=100 и суммирование.
Ч SUM=100.
t2 Снятие денег со счета Рз.
Р3: 100—>50 t3 Помещение денег на счетР1.
Р,: 100-» 150 t4 Фиксация транзакции Чтение счета Р2=100 и суммирование.
t5 SUM=200.
Чтение счета Р=50 и суммирование.
t<, SUM=250.
Фиксация транзакции t7 Сумма $250 по всем счетам неправильная должно быть $300 Результат.
Хотя транзакция «В» все сделала правильно деньги переведены без потери, но в результате транзакция «А» подсчитала неверную общую сумму.
74
[стр. 154]

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

Транзакция A Время Транзакция B Чтение счета и суммирование.
----Снятие денег со счета .


[стр.,161]

Транзакция A Время Транзакция B S-блокировка строк, удовлетворяющих условию .
(Заблокировано n строк) --Выборка строк, удовлетворяющих условию .
(Отобрано n строк) ----Вставка новой строки, удовлетворяющей условию .
--Фиксация транзакции S-блокировка строк, удовлетворяющих условию .
(Заблокировано n+1 строка) --Выборка строк, удовлетворяющих условию .
(Отобрано n+1 строк) --Фиксация транзакции --Появились строки, которых раньше не было Результат.
Блокировка на уровне строк не решила проблему появления фиктивных элементов.
Собственно несовместимый анализ Длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера.
Пусть на всех счетах находятся одинаковые суммы, например, по $100.
Короткая транзакция в этот момент выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется.

Транзакция A Время Транзакция B S-блокировка счета успешна --Чтение счета и суммирование.
----X-блокировка счета успешна --Снятие денег со счета .
--X-блокировка счета отвергается --Ожидание… S-блокировка счета успешна Ожидание… Чтение счета и суммирование.
Ожидание…

[стр.,168]

механизм обеспечения сериальности, свободный от недостатков метода блокировок.
Этот метод состоит в том, что транзакциям, читающим данные, предоставляется как бы "своя" версия данных, имевшаяся в момент начала читающей транзакции.
При этом транзакция не накладывает блокировок на читаемые данные, и, поэтому, не блокирует другие транзакции, изменяющие данные.
Такой механизм называется механизм выделения версий и заключается в использовании журнала транзакций для генерации разных версий данных.
Журнал транзакций предназначен для выполнения операции отката при неуспешном выполнении транзакции или для восстановления данных после сбоя системы.
Журнал транзакций содержит старые копии данных, измененных транзакциями.
Кратко суть метода состоит в следующем:  Для каждой транзакции (или запроса) запоминается текущий системный номер (SCN System Current Number).
Чем позже начата транзакция, тем больше ее SCN.
 При записи страниц данных на диск фиксируется SCN транзакции, производящей эту запись.
Этот SCN становится текущим системным номером страницы данных.
 Транзакции, только читающие данные не блокируют ничего в базе данных.
 Если транзакция A читает страницу данных, то SCN транзакции A сравнивается с SCN читаемой страницы данных.
 Если SCN страницы данных меньше или равен SCN транзакции A, то транзакция A читает эту страницу.
 Если SCN страницы данных больше SCN транзакции A, то это означает, что некоторая транзакция B, начавшаяся позже транзакции A, успела изменить или сейчас изменяет данные страницы.
В этом случае транзакция A просматривает журнал транзакция назад в поиске первой записи об изменении нужной страницы данных с SCN меньшим, чем SCN транзакции A.
Найдя такую запись, транзакция A использует старый вариант данных страницы.
Рассмотрим, как решается проблема несовместного анализа с использованием механизма выделения версий.
Длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера.
Пусть на всех счетах находятся одинаковые суммы, например, по $100.
Короткая транзакция в этот момент выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется.

Транзакция A Время Транзакция B Проверка SCN счета SCN транзакции больше SCN счета.
Чтение счета без наложения блокировки и суммирование.
----X-блокировка счета успешна --Снятие денег со счета .
--X-блокировка счета успешна

[Back]