Малко за безизходица, 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 състоянието на. който показва, което се блокира, които пазят и какво очаква