Was ist Deadlock in einer Datenbank?

8

Was ist Deadlock in SQL-Server und wann es auftritt? Was sind die Probleme mit Deadlock und wie man es löst?

    
VenkatReddy.Ravu 05.05.2010, 16:12
quelle

3 Antworten

18

Im Allgemeinen bedeutet Deadlock, dass zwei oder mehr Entitäten einige Quellen blockieren, und keiner von ihnen ist in der Lage, zu beenden, weil sie Quellen zyklisch blockieren.

Ein Beispiel: Nehmen wir an, ich habe Tabelle A und Tabelle B, ich muss etwas aktualisieren in A und dann B und ich beschließe, beide im Moment der Verwendung zu sperren (das ist wirklich dummes Verhalten, aber es dient ihm.) Zweck jetzt). Im selben Moment macht jemand anderes dasselbe in umgekehrter Reihenfolge - sperrt zunächst B und sperrt dann A.

Chronologisch passiert das:

proc1: Sperren A proc2: Sperre B

proc1: Sperre B - beginnt zu warten, bis proc2 B freigibt proc2: Sperre A - beginnt zu warten, bis proc1 A

freigibt

Es ist offensichtlich, dass keiner von ihnen fertig wird. Das ist Deadlock.

Das Loch geht viel tiefer, aber das ist nur Eintritt und wenn Sie mehr wissen müssen, investieren Sie Ihre Zeit. An unserer Universität gibt es ganze Vorlesungen darüber - denken Sie also nicht, dass das Lesen weniger Artikel Sie zu einem Experten macht; -)

    
Pz. 05.05.2010, 16:21
quelle
7

Ein Deadlock tritt auf, wenn zwei Personen mehrere Ressourcen ausführen müssen und einige der Ressourcen von jedem der Benutzer gesperrt sind. Dies führt dazu, dass A ohne etwas, das B hat, nicht ausführen kann und umgekehrt.

Sagen wir, ich habe Person A und Person B. Beide müssen zwei Zeilen zum Ausführen bekommen (Row1 und Row2).

  • Person A sperrt Row1 und versucht, Row2 zu erhalten.
  • Person B sperrt Row2 und versucht, Row1 zu erhalten.

Person A kann nicht ausgeführt werden, weil sie Row2 benötigt, Person B kann nicht ausgeführt werden, da sie Row1 benötigt. Keine der beiden wird jemals in der Lage sein, etwas auszuführen, weil sie das verriegeln, was der andere braucht und umgekehrt.

Eine vernünftig einfache Möglichkeit, Deadlock zu reduzieren, besteht darin, dass Sie in all Ihren komplexen Transaktionen Operationen in der gleichen Reihenfolge ausführen. Mit anderen Worten, greifen Sie auf Tabelle1 und dann auf Tabelle2 in derselben Reihenfolge zu. Dies wird dazu beitragen, die Anzahl der auftretenden Deadlocks zu reduzieren.

    
Paul 05.05.2010 17:14
quelle
1

Eine Sackgasse, die sich ergeben kann, wenn zwei (oder mehr) Transaktionen abgeschlossen sind Warten auf Schlösser freigegeben werden, die von den anderen gehalten werden.

    
bibek khadgi 30.06.2014 15:38
quelle