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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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

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

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

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

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

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

В языке 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 – самый высокий уровень изоляции транзакций. На весь набор данных устанавливается блокировка. Никакие модификации извне не допускаются до полного завершения транзакции.