Базы данных. Вводный курс

         

Отсутствие неповторяющихся чтений (третий уровень изоляции)


Рассмотрим сценарий совместного выполнения транзакций T1

и T2, показанный на рис. 13.3. В момент времени t1

транзакция T1

читает объект базы данных o

(выполняет операцию R(o)). До завершения транзакции T1

в момент времени t2

>

t1

транзакция T2

изменяет объект o

(выполняет операцию W(o)) и успешно завершается оператором COMMIT. В момент времени t3

>

t2

транзакция T1

повторно читает объект o

и видит его измененное состояние.


Рис. 13.3. Неповторяющиеся чтения

Чтобы избежать неповторяющихся чтений, до завершения транзакции T1

никакая другая транзакция не должна изменять объект o

(для этого достаточно заблокировать доступ по записи к объекту o

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

Заметим, что существует возможность обеспечения разных уровней изолированности для разных транзакций, выполняющихся в одной системе баз данных (кстати, соответствующие операторы были предусмотрены уже в стандарте SQL:1992). Как уже отмечалось, для корректного соблюдения ограничений целостности достаточен первый уровень. Существует ряд приложений, которым хватает первого уровня изолированности (например, прикладные или системные статистические утилиты, для которых некорректность индивидуальных данных несущественна). При этом удается существенно сократить накладные расходы СУБД и повысить общую эффективность.



Содержание раздела