Неповторяемое считывание
Проблема несовместимого анализа
Проблема несовместимого анализа включает несколько различных вариантов:
- Неповторяемое считывание.
- Фиктивные элементы (фантомы).
- Собственно несовместимый анализ.
Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.
| Транзакция A | Время | Транзакция B |
Чтение
|
| --- |
| --- |
| Чтение
|
| --- |
| Запись
|
| --- |
| Фиксация транзакции |
Повторное чтение
|
| --- |
| Фиксация транзакции |
| --- |
| Неповторяемое считывание |
Транзакция A ничего не знает о существовании транзакции B, и, т.к. сама она не меняет значение в строке, то ожидает, что после повторного чтения значение будет тем же самым.
Результат. Транзакция A работает с данными, которые, с точки зрения транзакции A, самопроизвольно изменяются.
Фиктивные элементы (фантомы)
Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций - чтение одновременно нескольких строк, удовлетворяющих некоторому условию.
Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.
| Транзакция A | Время | Транзакция B |
Выборка строк, удовлетворяющих условию . (Отобрано n строк)
|
| --- |
| --- |
| Вставка новой строки, удовлетворяющей условию .
|
| --- |
| Фиксация транзакции |
Выборка строк, удовлетворяющих условию . (Отобрано n+1 строк)
|
| --- |
| Фиксация транзакции |
| --- |
| Появились строки, которых раньше не было |
Транзакция A ничего не знает о существовании транзакции B, и, т.к. сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки.
Результат. Транзакция A в двух одинаковых выборках строк получила разные результаты.
. (Отобрано n строк)