sql >> Database >  >> RDS >> Sqlserver

Wat is een deadlock in een database?

Over het algemeen betekent een deadlock dat twee of meer entiteiten sommige bronnen blokkeren, en geen van hen kan het beëindigen, omdat ze bronnen op een cyclische manier blokkeren.

Een voorbeeld:laten we zeggen dat ik tabel A en tabel B heb, ik moet een update uitvoeren in A en dan in B en ik besluit ze allebei te vergrendelen op het moment van gebruik (dit is echt dom gedrag, maar het dient nu zijn doel ). Op hetzelfde moment doet iemand anders hetzelfde in tegenovergestelde volgorde - eerst B vergrendelen, dan A vergrendelen.

Chronologisch gebeurt dit:

proc1:Vergrendel A

proc2:Slot B

proc1:Lock B - begint te wachten tot proc2 B loslaat

proc2:Lock A - begint te wachten tot proc1 A loslaat

Geen van beiden zal ooit eindigen. Dat is een impasse. In de praktijk resulteert dit meestal in time-outfouten, aangezien het niet gewenst is dat een zoekopdracht voor altijd blijft hangen, en het onderliggende systeem (bijv. de database) zal zoekopdrachten die niet op tijd klaar zijn, doden.

Een voorbeeld uit de praktijk van een impasse is wanneer u uw huissleutels in uw auto en uw autosleutels in uw huis op slot doet.



  1. Script genereren om alle beperkingen voor externe sleutels in SQL Server-database in te schakelen - SQL Server / TSQL-zelfstudie, deel 78

  2. Kan ik de naam krijgen van alle tabellen van de SQL Server-database in de C#-toepassing?

  3. Hoe maak je een gebruiker/database in script voor Docker Postgres

  4. SQLSTATE[23000]:Foutafhandeling van schending van integriteitsbeperking