Deadlock что это
Перейти к содержимому

Deadlock что это

Немного про Deadlock

В оффициальной документации Mysql про типы блокировок написано совсем немного, а именно:

Есть 2 типа блокировок — Shared (S) и Exclusive (X). Первый тип позволяет только читать данные прикрытые этой блокировкой, второй — читать, писать, удалять и (о чем скромно умолчали) — получить блокировку уровня S

Так же сказано что если Транзакция№1 владеет блокировкой типа S на строке r, то другая Транзакция№2 может захватить эту блокировку. Чтобы получить блокировку типа X на этой строке, второй транзакции придется тихо подождать в сторонке.

Если же Транзакция№1 владеет блокировкой типа X на строке r, то Транзакция№2 не может ни захватить эту же блокировку, ни получить новую уровня S. Она опять тихо идет и ждет пока Транзакция№1 освободит требуемую строку.

Здесь есть один важный момент, который необходимо усвоить: блокировки S и X — это 2 разные блокировки. Это не значит что блокировка S, это какое-то подмножество блокировки X. Это две разных сущности.

Вернемся к дедлокам. На некоторых форумах я встречал вопросы «Как получит deadlock в Mysql». На самом деле очень просто.

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

Краткий рецепт приготовления deadlock на одной строке
1) Транзакция№1 получает блокировку S и продолжает работу
2) Транзакция№2 пытается получить блокировку типа X и… начинает ждать когда Транзакция№1 освободит блокировку S
3) Транзакция№1 пытается получить блокировку типа X и… начинает ждать когда Транзакция№2 получит блокировку типа X и освободит её

Тут есть один скользкий момент. Казалось бы что мешает Транзакции№1 получить блокировку X если она уже имеет блокировку S на этой же строке. А мешает то о чем мы говорили
1) Во-первых X и S это две разных блокировки
2) Во-вторых блокировка типа S не дает право на получение блокировки типа X. Никаких привилегий — в очередь!

Код для ситуации выше

Как же с этим бороться? Офф. сайт Mysql советует комититься почаще, а так же перепроверять код ошибки и перепроводить откатившуюся транзакцию. Мне кажется есть вариант получше — сразу получать блокировку типа X. Тогда на третьем шаге нашего рецепта Транзакция№1 смогла бы получить свою законную блокировку и спокойно завершиться

Напоследок скажу что определить причину deadlock поможет команда SHOW ENGINE INNODB STATUS, которая показывает какие блокировки кто держит и какие ожидает

deadlock

Deadlock — oder Verklemmung bezeichnet in der Informatik einen Zustand, bei dem ein oder mehrere Prozesse auf Betriebsmittel warten, die dem Prozess selbst oder einem anderen beteiligten Prozess zugeteilt sind. Eine Abart der Verklemmung ist der Livelock… … Deutsch Wikipedia

deadlock — dead·lock / ded ˌläk/ n: a state of inaction resulting from the opposition of equally powerful uncompromising persons or factions: as a: the state of a jury unable to agree on a verdict see also allen charge b: impasse … Law dictionary

deadlock — UK US /ˈdedlɒk/ noun [C or U] ► a situation in which people cannot agree and no progress can be made: a deadlock between sb (and sb) »There was deadlock between the directors and the negotiating committee. a deadlock in sth »The deadlock in the… … Financial and business terms

Deadlock — (в переводе с англ. тупик) может означать: Deadlock  ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами. Deadlock … … Википедия

deadlock — dead lock , n. 1. A lock which is not self latching, but requires a key to throw the bolt forward. [1913 Webster] 2. A counteraction of things, which produces an entire stoppage; a complete obstruction of action. [1913 Webster] Things are at a… … The Collaborative International Dictionary of English

Deadlock — Situation; Sackgasse * * * Dead|lock 〈[dɛ̣d ] m. 6; unz.〉 Situation, in der eine Beschlussfassung od. Einigung nicht (mehr) möglich ist, weil beide verhandelnden Parteien nicht zu weiteren Kompromissen bereit sind, z. B. bei Tarifverhandlungen od … Universal-Lexikon

deadlock — ► NOUN 1) a situation in which no progress can be made. 2) Brit. a lock operated by a key, as distinct from a spring lock. ► VERB ▪ cause to reach a deadlock … English terms dictionary

deadlock — [ded′läk΄] n. 1. a standstill resulting from the action of equal and opposed forces; stalemate 2. a tie between opponents in the course of a contest 3. DEADBOLT vt., vi. to bring or come to a deadlock … English World dictionary

deadlock — complete standstill, from DEAD (Cf. dead) + LOCK (Cf. lock). First attested 1779 in Sheridan s play The Critic … Etymology dictionary

deadlock — n *draw, tie, stalemate, standoff Analogous words: situation, condition, *state, posture: *predicament, plight, dilemma, quandary … New Dictionary of Synonyms

deadlock — [n] stalemate, impasse box*, Catch22*, cessation, checkmate, corner, dead end, dead heat, dilemma, draw, full stop, gridlock, halt, hole, pause, pickle, plight, posture, predicament, quandary, standoff, standstill, tie, wall*; concept 674 Ant.… … New thesaurus

Что такое дедлок?

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

Дедлок (англ. deadlock, что на русский можно перевести как «мёртвая блокировка», хотя встречается и вариант термина «взаимная блокировка») — это ситуация, когда несколько процессов или потоков, взаимно заблокировав друг для друга доступ к некому общему для них всех ресурсу, бесконечно долго ожидают его освобождения. Такая ситуация чаще всего возникает при работе с базами данных, хотя может сложиться и в многопоточном приложении.

Простейшая ситуация, приводящая к deadlock’у, такова: у нас есть два процесса (или потока) и два ресурса, доступ к которым каждый из процессов намерен захватить. Первый процесс захватывает один ресурс, второй — оставшийся, и, выполнив какие-то действия с этими ресурсами, процессы начинают ожидать, когда освободится второй из нужных для них ресурсов. Конечно, вы можете сказать, что такой проблемы не было бы, если бы процесс сначала освобождал ресурс, а потом уже ожидал освобождения другого ресурса. Однако, к сожалению, не всё так просто, и далеко не всегда это возможно. Например, вполне может сложиться ситуация, когда каждому из процессов необходим эксклюзивный доступ к каждому их ресурсов для завершения выполнения какой-либо операции. Стоит заметить, что процессов/потоков, участвующих в дедлоке, может быть и не два, а значительно больше — тогда говорят о кольцевой блокировке.

Дедлок — особенно неприятная ситуация по той причине, что её довольно трудно воспроизвести, что называется, в лабораторных условиях, то есть при отладке приложения. Соответственно, довольно трудно исправить такую ошибку в программе, которая приводит её к дедлоку. Поэтому методы устранения дедлоков носят превентивный характер и используются уже на этапе проектирования программного продукта. Для того, чтобы предотвратить дедлок, стараются исключить одно из условий его возникновения, то есть, например, освобождать одни ресурсы до начала ожидания предоставления доступа к другим, либо же реализуют специальные менеджеры ресурсов, следящие за тем, чтобы не возникало дедлоков, и принудительно устраняющие их. Во многих современных СУБД есть такие менеджеры ресурсов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *