Транзакции. Параллельное исполнение. Блокировки

Материал из Викиконспекты
Перейти к: навигация, поиск

3 проблемы

  • Проблема потерянного обновления.

2.jpg

  • Проблема зависимости от незафиксированных результатов.

3.jpg

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

4.jpg

Транзакция А подсчитывает остатки на счетах, а транзакция В переводит сумму 10 со счета 3 на счет 1. Очевидно, что результат, вырабо- танный транзакцией А, — 110, является неправильным; если бы в ходе своего дальней- шего выполнения транзакция А снова записала этот результат в базу данных, то фактически оставила бы базу данных в противоречивом состоянии 1 . По сути, транзакция А обнару- жила несовместимое состояние базы данных и поэтому выполнила анализ несовмести- мости. Обратите внимание на различие между этим примером и предыдущим: в данном случае не возникает проблема зависимости транзакции А от незафиксированного изме- нения, поскольку в зафиксировала все свои обновления еще до того, как А прочитала значение АСС 3.

Принцип работы блокировки

1. Прежде всего, предположим, что в системе поддерживаются блокировки двух типов: исключительные блокировки (блокировки X — exclusive) и разделяемые блокировки (блокировки S — shared), которые определены. X и S иногда именуются, соответственно, блокировками записи и блокировками чтения

2 Если транзакция А владеет исключительной блокировкой (X), то запрос от некоторой другой транзакции в на получение блокировки кортежа t любого типа не может быть немедленно удовлетворен.

3. Если транзакция А владеет разделяемой блокировкой (S) кортежа t, то выполня ются следующие условия:

* запрос некоторой другой транзакции в на получение блокировки X кортежа t не может быть немедленно удовлетворен;
* запрос некоторой другой транзакции в на получение блокировки S кортежа t может и должен быть немедленно удовлетворен (это означает, что с этого вре

мени транзакция в также будет владеть блокировкой S кортежа).