Транзакции MySQL получили - PullRequest
       5

Транзакции MySQL получили

3 голосов
/ 16 ноября 2011

Я хочу использовать транзакции MySQL в проекте, но не использовав их раньше, я подумал, что смогу прочитать о любых возможных проблемах. Я нашел статью на http://mysqldatabaseadministration.blogspot.com/2007/04/innodb-performance-optimization.html, в которой говорится, что взаимоблокировки являются обычным явлением, и ваше приложение должно иметь возможность с ними справиться.

Что означает «тупик» в этом контексте? Насколько я понимаю, транзакции не блокируют базу данных, поэтому она не может быть заблокирована. Как мне поступить с такой проблемой.

Есть ли еще какие-то проблемы, на которые я должен обратить внимание?

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Может возникнуть тупик, когда транзакция 1 получает (для записи) ресурс A, а тем временем транзакция 2 получает ресурс B.

Теперь представьте, что транзакция 2 хочет ресурс A, но занята, поэтому ей приходится ждать, и транзакция пытается получить ресурс B и тоже находит его занятым. У тебя круговое ожидание, тупик. Транзакция 1 ожидает ресурс, который содержит транзакция 2, а транзакция 2 ожидает ресурс транзакции 1. Ни одна транзакция не может быть продолжена. Это самый простой пример, цепочка может быть длиннее.

MySQL InnoDB обнаруживает взаимоблокировки и завершает одну из транзакций, приводя к сбою.

Что вы можете сделать, чтобы избежать этой проблемы:

  • просто повторите попытку транзакции, например, вы можете повторить 3 раза (протестировано в средах с высоким параллелизмом, работает как чудо)
  • получить ресурсы в том же порядке. Если транзакции 1 и 2 требуют первого ресурса A, а затем B, в том же порядке, проблема не может возникнуть
1 голос
/ 16 ноября 2011

Транзакции действительно блокируют базу данных.И если две транзакции ждут друг друга, вы зашли в тупик.

Транзакция 1:

lock table1;
lock table2;

Транзакция 2:

 lock table2;
 lock table1;

Если теперь обе транзакции выполненыСвоим первым шагом они ждут друг друга.Вы должны избегать таких последовательностей.

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