Введение в базы данных Ограничения, присущие файловым системам



Download 0,92 Mb.
bet37/44
Sana08.06.2022
Hajmi0,92 Mb.
#642978
TuriЛекция
1   ...   33   34   35   36   37   38   39   40   ...   44
Bog'liq
Лекция 1

Транзакция 1

Время

Транзакция 2

S-блокировка tbl1 (успешна)

t1


SELECT f2 (f2=40)
FROM tbl1 WHERE f1=1;

t2


Х-блокировка tbl1 (успешна)

t3


UPDATE tbl1
SET f2=f2-30 (f2=10)
WHERE f1=1;

t4



t5

S-блокировка tbl1 (отменяется)

ROLLBACK WORK; (блокировка снимается)

t6

Ожидание …


t7

S-блокировка tbl1 (успешна)


t8

SELECT f2 (f2=10
FROM tbl1 WHERE f1=1;


t9

COMMIT (блокировка снимается)

Проблема несовместимого анализа разрешается в ситуации неповторяемого чтения. Неповторяемое чтение возникает тогда, когда между двумя, подряд идущими, операциями чтения транзакции 1 вклинивается транзакция 2, изменяющее считываемое значение в строке таблицы.
Чтобы избежать неповторяющихся чтений, до завершения транзакции 1 никакая другая транзакция не должна изменять объект A.
Транзакция 1 притормаживается до момента окончания транзакции 2. В результате транзакция 2 дважды читает одни и те же данные правильно.
Таблица 8.4 - Разрешение проблемы неповторяемого чтения

Транзакция 1

Время

Транзакция 2

S-блокировка tbl1 (успешна)

t1


SELECT f2 (f2=40)
FROM tbl1 WHERE f1=1;

t2



t3

S-блокировка tbl1 (успешна)


t4

SELECT f2 (f2=40)
FROM tbl1 WHERE f1=1;

X-блокировка tbl1 отвергается



Ожидание…


SELECT f2 (f2=10)
FROM tbl1 WHERE f1=1;

Ожидание…


COMMIT (блокировка снимается)

X-блокировка tbl1 - успешна



UPDATE tbl1 SET f2=F2-30 (f2=10) WHERE f1=1;

t5


COMMIT(блокировка снимается)

t6


Сложнее обстоит дело с фантомами и собственно несовместимым анализом данных.
Фантомы появляются в результате вставки новой строки (строк) транзакцией 1 по условию U1 между двумя, подряд идущими, выборками, удовлетворяющими условию U1 и выполняемыми транзакцией 2.
В ситуации появления строк-призраков блокировка не влияет на результат, так как S-блокировка строк, удовлетворяющих условию U1, предшествующая выбору строк никак не влияет на операцию вставки новой строки, которая может быть выполнена успешно. После фиксации транзакции 2 строки-призраки по-прежнему появляются в таблице базы данных.
Таблица 8.5 - Разрешение проблемы фантомов

Транзакция A

Время

Транзакция B


t1

S-блокировка строк, удовлетворяющих условию U1. (Заблокировано n строк)


t2

SELECT SUM(f2) FROM tbl1
Where f1=10.01.09;

Х-блокировка строк, удовлетворяющих условию U1. (Заблокировано n строк)



INSERT INTO tbl1 (f1,f2) VALUES (10.01.09,20);

t3


COMMIT (снятие блокировки)

t4



t5

S-блокировка строк, удовлетворяющих условию U1. (Заблокировано n строк)


t6

SELECT f2
FROM tbl1
Where f1=10.01.09;


t7

COMMIT (снятие блокировки)

Блокировка на уровне строк не решила проблему появления фиктивных элементов.
В ситуации собственно несовместимого анализа возникает тупик, так как S-блокировка счета СЧЕТ1, установленная операцией чтения СЧЕТ1=40, отвергает X-блокировку данного объекта, которую пытается установить транзакция 2 для обновления СЧЕТ1 (перевод суммы 10 на СЧЕТ3), и транзакция B переходит в состояние ожидания. 
Таблица 8.6 - Несовместимый анализ. Возникновение тупиковой ситуации

Транзакция A

Время

Транзакция B

S-блокировка tbl1 (СЧЕТ1, СЧЕТ2)

t1


SELECT Сч1 (Сч1=40)
FROM tbl1
WHERE f1=1;

t2



SUM=SUM+ Сч1 (SUM=40)

t3


SELECT Сч2 (Сч1=50)
FROM tbl1
WHERE f1=1;

t4


SUM=SUM+ Сч2 (SUM=90)

t5



t6

S-блокировка tbl1 (СЧЕТ3)


t7

SELECT Сч3 (Сч3=30)
FROM tbl1
WHERE f1=1;


t8

Х-блокировка tbl1 (СЧЕТ3)


t9

UPDATE tbl1 SET Сч3= Сч3-10 (Сч3=20);


t10

Х-блокировка tbl1 (отменяется)

S-блокировка СЧЕТ3 отменяется

t11

Ожидание…

Ожидание …



Таким образом, использование протокола доступа к данным на основе блокировок разрешает часть проблем параллелизма, но возникает новая проблема — тупики:
 проблема потери результатов обновления - возник тупик;
 проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание) - проблема разрешилась;
 неповторяемое считывание - проблема разрешилась;
 появление фиктивных элементов - проблема не разрешилась;
 проблема несовместимого анализа - возник тупик.
8.4 Тупики
Тупиковые ситуации (deadlocks) возникают при взаимных блокировках транзакций, выполняющихся на пересекающихся множествах данных.
Анализ разрешения проблем параллелизма позволяет утверждать, что ситуация тупика может возникнуть при наличии в смеси не менее двух транзакций, каждая из которых выполняет не менее двух операций. На практике ситуации могут быть гораздо более сложными из-за наличия большого числа взаимно заблокированных транзакций. Очевидно, что для разрешения тупиковых ситуаций необходимо предпринимать некоторые дополнительные действия. Для обнаружения тупиковой ситуации используется несколько подходов:
1) откат одной из транзакций (транзакции-жертвы). После разрешения тупика транзакция-жертва выполняется заново. СУБД не отслеживает тупиковые ситуации. Транзакции самостоятельно принимают решение о выборе жертвы;
2) вводится таймаут (time-out) – максимальное время, в течение которого транзакция может находиться в состоянии ожидания. Если транзакция находится в состоянии ожидания дольше таймаута, считается, что она находится в состоянии тупика, и СУБД инициирует её откат с последующим рестартом через случайный промежуток времени;
3) обнаружение и разрешение тупиковой ситуации средствами СУБД.
Первый и второй подходы характерны для настольных СУБД (FoxPro, Access, Paradox и др.). Этот метод прост и не требует дополнительных ресурсов системы. Для транзакций задается время ожидания (или число попыток), в течение которого транзакция пытается установить нужную блокировку. Если за указанное время блокировка не завершится успешно, то транзакция откатывается. Недостаток метода заключается в том, что транзакции-жертвы выбираются случайным образом. В результате из-за одной простой транзакции может откатится «дорогая» транзакция, которая уже использовала много времени и ресурсов вычислительной системы.
Третий подход характерен для промышленных СУБД (Oracle, MS SQL Server, Sybase и т.п.). Он основан на постоянной поддержке СУБД графа ожиданий транзакций. Граф ожидания транзакций - это ориентированный двудольный граф, в котором существует два типа вершин: вершины, соответствующие транзакциям, и вершины, соответствующие объектам захвата (блокирования). В этом графе существует дуга, ведущая из вершины-транзакции к вершине-объекту, если для этой транзакции существует удовлетворенный захват объекта. В графе существует дуга из вершины-объекта к вершине-транзакции, если транзакция ожидает удовлетворения захвата объекта.
Основой обнаружения тупиковых ситуаций является построение (или постоянное поддержание) графа ожидания транзакций. Для распознавания тупика здесь производится построение графа ожидания транзакций и в этом графе ищутся циклы.
Граф ожидания — это направленный граф, в вершинах которого расположены имена транзакций. Если транзакция А ждет окончания транзакции В, то из вершины А в вершину В идет стрелка. Дополнительно стрелки могут быть помечены именами заблокированных объектов и типом блокировки. Пример такого графа ожиданий приведен на рисунке 8.4.
Этот граф ожиданий построен для транзакций Т1, Т2, …,Т12, которые работают с объектами БД A,В,...,Н.

Рисунок 8.4 - Пример графа ожиданий транзакций
На графе объекты блокировки помечены типами блокировок, S — нежесткая (разделяемая) блокировка, X — жесткая (эксклюзивная) блокировка.
На диаграмме состояний ожидания видно, что транзакции Т9, Т8, Т2 и Т3 образуют цикл. Именно наличие цикла и является признаком возникновения тупиковой ситуации. Поэтому в момент 3 перечисленные транзакции будут заблокированы.
Разрушение тупика начинается с выбора в цикле транзакций так называемой транзакции-жертвы, то есть транзакции, которой решено пожертвовать, чтобы обеспечить возможность продолжения работы других транзакций.
Критерием выбора является стоимость транзакции; жертвой выбирается самая дешевая транзакция. Стоимость транзакции определяется на основе многофакторной оценки, в которую с разными весами входят время выполнения, число накопленных захватов, приоритет.
После выбора транзакции-жертвы выполняется откат этой транзакции, который может носить полный или частичный характер. При этом, естественно, освобождаются захваты и может быть продолжено выполнение других транзакций.
Заметим, что в централизованных системах стоимость построения графа ожидания сравнительно невелика, но она становится слишком большой в по-настоящему распределенных СУБД, в которых транзакции могут выполняться в разных узлах сети. Поэтому в таких системах обычно используются другие методы сериализации транзакций.

Download 0,92 Mb.

Do'stlaringiz bilan baham:
1   ...   33   34   35   36   37   38   39   40   ...   44




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish