Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist ein Deadlock in einer Datenbank?

Im Allgemeinen bedeutet Deadlock, dass zwei oder mehr Entitäten einige Quellen blockieren und keine von ihnen fertig werden kann, weil sie Quellen auf zyklische Weise blockieren.

Ein Beispiel:Nehmen wir an, ich habe Tabelle A und Tabelle B, ich muss einige Aktualisierungen in A und dann in B vornehmen und beschließe, beide im Moment der Verwendung zu sperren (das ist wirklich dummes Verhalten, aber es erfüllt jetzt seinen Zweck ). Im selben Moment macht jemand anderes dasselbe in umgekehrter Reihenfolge – sperrt zuerst B, dann sperrt A.

Chronologisch geschieht dies:

proc1:Sperre A

proc2:Sperre B

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

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

Keiner von ihnen wird jemals fertig werden. Das ist eine Sackgasse. In der Praxis führt dies normalerweise zu Zeitüberschreitungsfehlern, da es nicht erwünscht ist, dass Abfragen für immer hängen bleiben, und das zugrunde liegende System (z. B. die Datenbank) Abfragen beendet, die nicht rechtzeitig beendet werden.

Ein reales Beispiel für einen Deadlock ist, wenn Sie Ihre Hausschlüssel in Ihrem Auto und Ihre Autoschlüssel in Ihrem Haus einschließen.