Свойства уровней изоляции транзакций
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой
Уровень изоляции Неподтвержденное чтение Неповторяющееся  чтение Фантомное чтение
READ UNCOMMTITTED + + +
READ COMMITED + +
REPEATABLE READ +
SNAPSHOT
SERIALIZABLE

 

Для того чтобы транзакции A гарантировать заданный уровень изолированности, сервер установит на прочитанные этой транзакцией строки блокировку, запрещающую выполнять UPDATE в рамках другой транзакции. Это приведет к тому, что при попытке транзакцией B выполнить UPDATE для блокированной строки, транзакция B будет переведена в состояние ожидания до тех пор, пока транзакцией A не будет выполнен один из операторов завершения транзакции (COMMIT или ROLLBACK).

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

Для исследования взаимодействия двух параллельных транзакций следует их выполнить в двух разных сеансах.

На рис. 13.49, 13.50 представлены два параллельно работающих сценария, содержащих явные транзакции A и B.

 

Рис. 13.49. Неподтвержденное чтение: транзакция A

 

Рис. 13.50. Неподтвержденное чтение: транзакция В

 

С помощью комментариев (рис. 13.49, 13.50) в обоих сценариях обозначены моменты времени t1 и t2, соответствующие одноименным временным засечкам на рис. 13.46. Кроме того, применяется системная встроенная функция @@SPID, возвращающая системный идентификатор процесса, назначенный сервером текущему подключению.

Для моделирования схемы, представленной на рис. 13.46, сценарии следует выполнять в три этапа:

1) последовательно оба сценария до отметки t1;

2) последовательно оба сценария c отметки t1 до отметки t2;

3) последовательно оба сценария c отметки t2 и до конца.

Обратите внимание:

1) для транзакции A установлен уровень изоляции READ UNCOMMITTED;

2) транзакцией A прочитаны незафиксированные изменения строк таблиц FACULTY и PULPIT.

Сценарии на рис. 13.51 и 13.52 демонстрируют неповторяющееся чтение (рис. 13.47) в транзакции с уровнем изолированности READ COMMITTED.

 

Рис. 13.51. Неповторяющееся чтение: транзакция A

 

Рис. 13.52. Неповторяющееся чтение: транзакция В

 

Обратите внимание:

1) для транзакции A установлен уровень изоляции READ COMMITTED;

2) при повторном чтении в транзакции A (второй оператор SELECT) прочитаны зафиксированные изменения строк таблицы PULPIT.

Сценарии на рис. 13.53 и 13.54 демонстрируют фантомное чтение (рис. 13.48) в транзакции с уровнем изолированности READ REAPETABLE.

 

Рис. 13.53. Фантомное чтение: транзакция А

 

Рис. 13.54. Фантомное чтение: транзакция В

 

Обратите внимание:

 1) для транзакции A установлен уровень изоляции REPEATABLE READ;

2) при повторном чтении в транзакции A (второй оператор SELECT) прочитаны добавленная и зафиксированная строка таблицы TEACHER.

 

Дата: 2019-02-25, просмотров: 226.