Проблема несовместимого анализа

На рис. 15.5 показаны транзакции A и B, которые выполняются для кортежей со счетами (табл. 9.1). При этом транзакция A суммирует балансы, транзакция B производит перевод суммы 10 со счета 3 на счет 1. Полученный в итоге транзакции A результат 110, очевидно, неверен, и если он будет записан в базе данных, то в ней может возникнуть проблема несовместимости. В таком случае говорят, что транзакция A встретилась с несовместимым состоянием и на его основе был выполнен несовместимый анализ. Обратите внимание на следующее различие между этим примером и предыдущим: здесь не идет речь о зависимости транзакции A от транзакции B, так как транзакция B выполнила все обновления до того, как транзакция A извлекла СЧЕТ 3.

табл. 15.1 Остатки на счетах до выполнения транзакций.

 

Счет СЧЕТ 1 СЧЕТ 2 СЧЕТ 3
Остаток

 

Транзакция A Время Транзакция B
Извлечение кортежа СЧЕТ 1: СУММА = 40 t1
Извлечение кортежа СЧЕТ 1: СУММА = 90 t2
t3 Извлечение кортежа СЧЕТ 3:
t4 Обновление кортежа СЧЕТ 3: 30 ® 20
t5 Извлечение кортежа СЧЕТ 1:
t6 Обновление кортежа СЧЕТ 1: 40 ® 50
t7 Завершение выполнения транзакции
Извлечение кортежа СЧЕТ 3: СУММА = 110 (а не 120) t8

 

рис. 15.5. Транзакция A выполнила несовместимый анализ.