Несовместимый анализ данных

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

Время Транзакция A Транзакция B
S-блокировка счета - успешно ---
Чтение счета и суммирование. ---
--- X-блокировка счета - успешно
--- Снятие денег со счета .
--- X-блокировка счета - недоступно
--- Ожидание…
S-блокировка счета - успешно Ожидание…
Чтение счета и суммирование. Ожидание…
S-блокировка счета - недоступно Ожидание…
Ожидание… Ожидание…
  Ожидание… Ожидание…

Результат. Обе транзакции ожидают друг друга и не могут продолжаться. Возникла ситуация тупика (взаимоблокировки).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: