У меня есть Spring Сделка, которая аннотированный сстановится тупиковой 2 экземпляров той же сделки с сериализуемой изоляции
isolation = Isolation.SERIALIZABLE
Сделка имеет следующие шаги:
1)Read from MySQL Tables 1, 2[Both InnoDB engine based]
2)Write into Table 1
3)Write into Table 2
Теперь, когда я побежал два экземпляра одна и та же транзакция почти параллельно несколько раз, я получил два ответа:
1)Lock wait timeout exceeded; try restarting transaction
2)Deadlock found when trying to get lock; try restarting transaction
Ситуация с тупиком кажется особенно интересной (в зависимости от деталей взаимоблокировки от двигателя innoDb):
Txn 1 застрял на шаге 2, ожидая блокировки режима «S» по индексу таблицы T1.
Txn 2 застрял на шаге 3, удерживая блокировку режима «X» на том же индексе, как указано выше & с теми же деталями (гекс. Идентификаторами упомянутых как в выше замка) & ждет «X» режиме блокировки на таблице T2.
И, наконец, Txn1 откидывается назад.
Я чувствую, что некоторые блокировки диапазона индексов вызывают тупик, но хотели бы понять, как это может произойти?
Кроме того, если это так, как работает изоляция (позволяя txns работать параллельно &, откатывая один из них), почему возникает ситуация ожидания ожидания ожидания ожидания?