Механизм сериализации транзакций
Для обеспечения сериализации транзакций захваты объектов, произведенные по инициативе транзакции, можно снимать только при ее завершении.
Всоответствии с протоколом выполнение транзакции разбивается на две фазы:
первая фаза транзакции (фаза роста) – накопление захватов;
вторая фаза (фаза фиксации или отката) – освобождение захватов.
Ручная блокировка
Перед выполнением любой операции над объектом БД от имени транзакции запрашивается захват объекта в совместном или монопольном режиме.
В языке 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 – самый высокий уровень изоляции транзакций. На весь набор данных устанавливается блокировка. Никакие модификации извне не допускаются до полного завершения транзакции.