ВВЕДЕНИЕ В СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ

1942e8f8

Фиктивные элементы (фантомы)


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

Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

Транзакция A

Время

Транзакция B



Появились строки, которых раньше не было

Выборка строк, удовлетворяющих условию
.
(Отобрано n строк)
---
---
Вставка новой строки, удовлетворяющей условию
.
---
Фиксация транзакции
Выборка строк, удовлетворяющих условию
.
(Отобрано n+1 строк)
---
Фиксация транзакции
---
   

Транзакция A ничего не знает о существовании транзакции B, и, т.к. сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки.

Результат. Транзакция A в двух одинаковых выборках строк получила разные результаты.


Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

Транзакция A

Время

Транзакция B

Появились строки, которых раньше не было

S-блокировка строк, удовлетворяющих условию
.
(Заблокировано n строк)
---
Выборка строк, удовлетворяющих условию
.
(Отобрано n строк)
---
---
Вставка новой строки, удовлетворяющей условию
.
---
Фиксация транзакции
S-блокировка строк, удовлетворяющих условию
.
(Заблокировано n+1 строка)
---
Выборка строк, удовлетворяющих условию
.
(Отобрано n+1 строк)
---
Фиксация транзакции
---
   

Результат. Блокировка на уровне строк не решила проблему появления фиктивных элементов.



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