Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Deadlock Detection чрез PHP

Застой връща грешка 1213 които трябва да обработите от страна на клиента

Имайте предвид, че изчакването на безизходица и заключване са различни неща. В задънена улица няма „неуспешна“ транзакция:и двамата са виновни. Няма гаранция кой от тях ще бъде върнат назад.

Застой възниква в сценарий като този:

UPDATE  t_first -- transacion 1 locks t_first
SET     id = 1;

UPDATE  t_second -- transaction 2 locks t_second
SET     id = 2;

UPDATE  t_second -- transaction 1 waits for transaction 2 to release the lock on t_second
SET     id = 2;

UPDATE  t_first -- transaction 2 waits for transaction 1 to release the lock on t_first. DEADLOCK
SET     id = 2;

Сигурни ли сте, че не го бъркате с изчакване за заключване?

Изчакване на заключване възниква всеки път, когато транзакция се опита да заключи ресурс, вече заключен от друга транзакция.

В примера по-горе се получава изчакване на заключване на стъпка 3 .

Тъй като това е нормална ситуация (за разлика от безизходица), която може да бъде разрешена отвън чрез извършване или връщане назад на транзакцията, която държи заключването, InnoDB няма да се опитва да върне обратно транзакцията, която държи заключването.

Вместо това той просто ще отмени изявлението, което се е опитало да получи заключването, след като настъпи изтичането на времето.

Времето за изчакване по подразбиране е 50 секунди и се задава с помощта на innodb_lock_wait_timeout .

Неуспешното изявление (това, което се опита да придоби ключалката) ще върне грешка 1205 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите процент от общия брой, когато заявката има GROUP BY?

  2. Подредете избора на ред по множество колони

  3. PreparedStatement:Мога ли да задам името на колоната като параметър?

  4. Как да спрете MySQL при инсталиране на Mac OS?

  5. Как да използвате orchestral/tenanti в Laravel 5, за да изградите приложение с множество наематели с множество бази данни?