Решение проблем параллелизма с помощью S и X блокировок

Рассмотрим, как бу дут себя вести транзакции, вступающие в конфликт при доступе к данным, если они подчиняются протоколу доступа к данным.

Проблема потери результатов обновления

Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.

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

Обе транзакции успешно накладывают S-блокировки и читают объект Решение проблем параллелизма с помощью S и X блокировок - student2.ru . Транзакция A пытается наложить X-блокирокировку для обновления объекта Решение проблем параллелизма с помощью S и X блокировок - student2.ru . Блокировка отвергается, т.к. объект Решение проблем параллелизма с помощью S и X блокировок - student2.ru уже S-заблокирован транзакцией B. Транзакция A переходит в состояние ожидания до тех пор, пока транзакция B не освободит объект. Транзакция B, в свою очередь, пытается наложить X-блокирокировку для обновления объекта Решение проблем параллелизма с помощью S и X блокировок - student2.ru . Блокировка отвергается, т.к. объект Решение проблем параллелизма с помощью S и X блокировок - student2.ru уже S-заблокирован транзакцией A. Транзакция B переходит в состояние ожидания до тех пор, пока транзакция A не освободит объект.

Результат. Обе транзакции ожидают друг друга и не могут продолжаться. Возникла ситуация тупика.

Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание)

Транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные.

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

Результат. Транзакция A притормозилась до окончания (отката) транзакции B. После этого транзакция A продолжила работу в обычном режиме и работала с правильными данными. Конфликт разрешен за счет некоторого увеличения времени работы транзакции A (потрачено время на ожидание снятия блокировки транзакцией B).

Проблема несовместимого анализа

Неповторяемое считывание

Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.



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

Результат. Транзакция B притормозилась до окончания транзакции A. В результате транзакция A дважды читает одни и те же данные правильно. После окончания транзакции A, транзакция B продолжила работу в обычном режиме.

Наши рекомендации