Перезапуск транзакции в MySQL после тупика - PullRequest
7 голосов
/ 03 августа 2011

Я столкнулся с тупиковой ситуацией в моем MySQL. Как я могу настроить MySQL для автоматического перезапуска транзакции, когда она обнаруживает тупик?

Ответы [ 4 ]

6 голосов
/ 03 августа 2011

Вы не можете сделать это автоматически, так как возникла взаимоблокировка, потому что две транзакции пытались изменить одинаковые данные . Если вы знаете , что просто попытаться повторить те же операторы снова будет правильным решением, вам необходимо реализовать это в своем приложении.

Однако, если база данных будет делать это автоматически, это будет безответственно, поскольку могут также возникнуть случаи, когда вашему приложению сначала нужно взглянуть на новую ситуацию в базе данных, прежде чем выдавать потенциально измененные операторы, если они вообще есть.

3 голосов
/ 11 сентября 2012

Перезапуск транзакции означает:

  • (опционально) инициировать новый дескриптор подключения к базе данных;
  • Выполнить первый код функции / строки, который инициирует новую транзакцию и повторяет все выполнениепуть до commit.

Поскольку ядро ​​базы данных не может знать запросы, которые были бы выполнены после возникновения тупика, оно не может повторить все для вас (не говоря уже о том, что может быть приложение)логика, которая может выполнять различные запросы на основе недавно измененных данных базы данных).

3 голосов
/ 03 августа 2011

Обычно вы должны писать свои приложения так, чтобы они всегда были готовы к повторной выдаче транзакции, если она откатывается из-за тупика.

http://dev.mysql.com/doc/refman/5.1/en/innodb-deadlocks.html

Руководство предполагает, что такой опции конфигурации не существует.

0 голосов
/ 03 августа 2011

Ну, вы не можете, и это не имеет смысла.Ваше приложение должно справиться с взаимоблокировкой, и то, как это делается, во многом зависит от вашей бизнес-логики, например, перехватить исключение, подождать несколько секунд, повторить попытку x раз ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...