Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Л-6 - Сеансы, транзакции и блокировки

.pdf
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
569.37 Кб
Скачать

Граф состояний ожидания транзакций

Направленный граф, в вершинах которого расположены имена транзакции.

Если транзакция А1 ждет окончания транзакции А2, то из вершины А1 в вершину А2 идет стрелка. Стрелки могут быть помечены именами заблокированных объектов и типом блокировки.

Признак тупика наличие в графе цикла транзакций.

Пример графа состояний ожидания транзакций

Разрушение тупика

Выбирают транзакцию, которой можно пожертвовать. Жертва – самая дешевая транзакция. Стоимость транзакции определяется на основе многофакторной оценки, в которую с разными весами входят:

время выполнения,

число накопленных захватов,

приоритет.

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

Двухфазная блокировка

Для заданного набора транзакций любой порядок их выполнения называется графиком запуска:

последовательный график – выполнение транзакций по одной без их чередования;

чередующийся график – непоследовательное выполнение транзакций.

Два графика называются эквивалентными, если при их выполнении будет получен одинаковый результат, независимо от исходного состояния БД.

Теорема двухфазной блокировки

Если все транзакции подчиняются протоколу двухфазной блокировки, то для всех возможных чередующихся графиков запуска существует возможность упорядочения (С. Есваран).

Протокол двухфазной блокировки 2PL (two phase lock)

или 2РС (two phase commit):

перед выполнением каких-либо операций с некоторым объектом транзакция должна заблокировать этот объект;

после снятия блокировки транзакция не должна накладывать никаких других блокировок.

Механизм сериализации транзакций

Для обеспечения сериализации транзакций захваты объектов, произведенные по инициативе транзакции, можно снимать только при ее завершении.

Всоответствии с протоколом выполнение транзакции разбивается на две фазы:

первая фаза транзакции (фаза роста) – накопление захватов;

вторая фаза (фаза фиксации или отката) – освобождение захватов.

Ручная блокировка

Перед выполнением любой операции над объектом БД от имени транзакции запрашивается захват объекта в совместном или монопольном режиме.

В языке SQL введен оператор явной блокировки таблицы: LOCK TABLE таблица IN {SHARED | EXCLUSIVE} MODE

Уровни изоляции транзакций

Под уровнем изоляции понимается способность транзакции видеть данные вне своей области определения, т. е. изменяемые другими транзакциями.

Стандарт SQL определяет 4 уровня изоляции транзакций

(isolation level).

чтение неподтвержденного (read uncommitted);

чтение подтвержденного (read committed);

повторяемое чтение (repeatable read);

упорядочение (serializable).

Высокие уровни включают в себя более низкие

Характеристики уровней изоляции транзакций (1)

READ UNCOMMITTED – самый низкий уровень. Допускает грязное чтение (возможность видеть неподтвержденные данные). Блокировки не используются.

Характеристики уровней изоляции транзакций (2)

READ COMMITTED – при чтении данных устанавливаются общие блокировки. Грязное чтение не допускается, но может произойти призрачное чтение (когда в разных операциях считывается разное количество строк)

REPEATABLE READ – в данных, отобранных запросом, не допускаются изменения (блокированы для удалений, обновлений и пр.), призрачные строки могут появляться.

SERIALIZABLE – самый высокий уровень изоляции транзакций. На весь набор данных устанавливается блокировка. Никакие модификации извне не допускаются до полного завершения транзакции.