Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db-transactions / lec-transactions.ppt
Скачиваний:
16
Добавлен:
18.03.2015
Размер:
531.97 Кб
Скачать

Работа с транзакциями в БД.

ru.wikipedia.org

Уровень изолированности транзакций

Уровень изолированности транзакций — значение,

определяющее уровень, при котором в транзакции

допускаются несогласованные данные, то есть степень изолированности одной транзакции от другой.

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

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

Потерянное обновление

В транзакции 1 изменяется значение поля f2,

Затем в транзакции 2 также изменяется значение этого поля.

В результате изменение, выполненное первой транзакцией, будет

потеряно.

«Грязное» чтение read uncommited

В транзакции 1 изменяется значение поля f2

Затем в транзакции 2 выбирается значение этого поля.

После этого происходит откат транзакции 1.

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

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

В транзакции 2 выбирается значение поля f2,

Затем в транзакции 1 изменяется значение поля f2.

При повторной попытке выбора значения из поля f2 в транзакции 2 будет получен другой результат.

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

Фантомная вставка (фантомное чтение)

Одним и тем же запросом в транзакции 2 выбираются разные строки, так как между ними оказалась операция INSERT другой транзакции.

Содержимое существующих строк при не изменялось, так что блокировка строк не может решить эту проблему.

Уровни изоляции

SERIALIZABLE (упорядочиваемость)

REPEATABLE READ (повторяемость чтения)

READ COMMITTED

(чтение фиксированных данных)

READ UNCOMMITTED

(чтение незафиксированных данных)

Поведение при различных уровнях изолированности

Фантомная

Неповторяющее

«Грязное»

Потерянное

вставка

ся чтение

чтение

обновление

SERIALIZABLE

+

+

+

+

REPEATABLE

-

+

+

+

READ

 

 

 

 

READ

-

-

+

+

COMMITTED

 

 

 

 

READ

-

-

-

+ (?)

UNCOMMITTED

 

 

 

 

READ UNCOMMITTED

Разрешается «грязное чтение».

Низший уровень изоляции.

Гарантирует только физическую целостность данных (отсутствие повреждений)

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

READ COMMITTED

Грязное чтение отсутствует

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

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