Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[конспект] Технологии баз данных [v0.8.1].pdf
Скачиваний:
79
Добавлен:
21.03.2016
Размер:
1.3 Mб
Скачать

9.3.Изолированность транзакций

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

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

При параллельном выполнении транзакций возможны следующие проблемы (рис. ??):

1. Проблема потерянных обновлений (lost update) — при одновременном изменении одного блока

данных разными транзакциями одно из изменений теряется;

2.Проблема чтения «грязных» данных (dirty read; зависимость от незафиксированных данных) — чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится);

3.Проблема неповторяющегося чтения (non-repeatable read) — при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными или удалёнными;

4.Проблема фантомов — при повторном чтении в рамках одной транзакции прочитаны данные (новые «фантомные» кортежи), которых при предыдущих чтениях не было, хотя они удовлетворяли условиям отбора предыдущего чтения.

Начиная со стандарта SQL:1992 в SQL введены уровни изоляции, установка которых предотвращает указанные конфликтные ситуации. Уровни изоляции определяют, может ли читающая транзакция считывать («видеть») результаты работы других одновременно выполняемых завершённых и/или незавершённых пишущих транзакций. Введены следующие четыре уровня изоляции (начиная от самого высокого с наибольшей изолированностью, но при этом наиболее трудно распараллеливаемого):

3 уровень. Упорядочиваемость (сериализация; SERIALIZABLE) — на этом уровне результаты парал-

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

2 уровень. Повторяемость чтения (REPEATABLE READ) — уровень, при котором чтение одной и той же строки или строк в транзакции дает одинаковый результат: пока транзакция не завершена, никакие другие транзакции не могут модифицировать эти данные.

1 уровень. Чтение фиксированных данных (READ COMMITTED) — уровень с завершенным чтени-

ем, при котором отсутствует черновое («грязное») чтение (т. е. чтение одним пользователем данных, которые не были зафиксированы в базе данных командой COMMIT).

0 уровень. Чтение зафиксированных данных (READ UNCOMMITTED) — гарантирует только отсут-

ствие потерянных обновлений.

По умолчанию в СУБД обычно установлен уровень READ COMMITTED. В реализациях систем могут содержаться и другие уровни изоляции (например, SNAPSHOT в MS SQL Server с JDBC Driver).

Решаемые и нерешаемые проблемы того или иного уровня изоляции можно изобразить в виде таблицы ( — предотвращает, — не предотвращает):

61