Малко за безизходица, savepearlharbor

Това е кратък пост за причините за застоя

На по-малко натоварени проекти, които използват InnoDB сделка по всяко време може да бъде вид грешка







«Deadlock намери, когато се опитвате да получите заключване; опитайте да рестартирате сделка »

Основното нещо е да не изпадате в паника при вида на тези ужасни думи, ние сега разгледаме защо това се случва.

Малко за видовете ключалки

Официалната документация за видовете ключалки Mysql написана доста, а именно:

Той също така се казва, че ако Tranzaktsiya№1 притежава тип заключване S R на линия, от друга Tranzaktsiya№2 да заснемете ключалката. За да се получи тип заключване X по тази линия, втората сделка ще трябва да изчакаме спокойно в кулоарите.

Ако Tranzaktsiya№1 притежава ключалки тип X в ред R, тогава Tranzaktsiya№2 не може да вземете една и съща ключалката, или да получите едно ново ниво на S. Той е спокоен отново и чака, докато е необходимо линия освобождаване Tranzaktsiya№1.

Има един важен момент, за да се научи: Lock S и X - е на 2 заключване. Това не означава, че ключалката S, е подмножество на блок X. за това са две различни лица.







Да се ​​върнем към задънена улица. На някои форуми съм виждал на въпросите на "Как да стигнем до задънена улица в Mysql». Всъщност, това е много проста.

Всички необходими съставки, с които разполагаме: две сделки, тип заключване S и X и линията, на която се получава за заключване.

Кратка рецепта за безизходица
1) придобива ключалката Tranaktsiya№1 S и продължава да работи
2) Tranaktsiya№2 опитва да получи кичур от тип X и ... започва да се изчака, когато ключалката освободи Tranaktsiya№1 S
3) Tranaktsiya№1 опитва да получи кичур от тип X и ... започва да се изчака, когато Tranaktsiya№2 получите кичур от тип X и го пуснете

Има един хлъзгав момент. Изглежда, че пречи Tranzaktsii№1 получи заключване X, ако тя вече има S заключване на една и съща линия. И това пречи на това, което ние говорихме за
1) Първо X е S и две различни заключване
2) На второ място тип заключване S няма право да получава ключалки тип X. Все още няма привилегии - на мястото!

Кодът за по-горе ситуация,

Как да се справят с него? Изключено. Mysql уебсайт съветва Komichi по-често, а също така проверете кода за грешка и ReWire се връщам на сделката. Мисля, че има по-добър вариант - само за да получите тип заключване X. а тогава на третия етап на нашата рецепта Tranzaktsiya№1 може да получи законното си и спокойно заключване край

И накрая ще кажа, че причината за ключалката, използвайте командата SHOW ДВИГАТЕЛ InnoDB състоянието на. който показва, което се блокира, които пазят и какво очаква