2017-01-08 8 views
0

У меня есть 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 работать параллельно &, откатывая один из них), почему возникает ситуация ожидания ожидания ожидания ожидания?

ответ

0

Читаемый нуждается в FOR UPDATE или LOCK IN SHARE MODE.

Если этого не достаточно, пожалуйста, сообщите нам операторы sql от BEGIN до COMMIT и SHOW CREATE TABLE.

 Смежные вопросы

  • Нет связанных вопросов^_^