sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er et dødvande i en database?

Generelt betyder dødvande, at to eller flere enheder blokerer nogle kilder, og ingen af ​​dem er i stand til at afslutte, fordi de blokerer kilder på en cyklisk måde.

Et eksempel:Lad os sige, at jeg har tabel A og tabel B, jeg skal lave en opdatering i A og derefter B, og jeg beslutter mig for at låse dem begge i brugsøjeblikket (dette er virkelig dum opførsel, men det tjener formålet nu ). I samme øjeblik gør en anden det samme i modsat rækkefølge - låser B først, derefter låser A.

Kronologisk sker dette:

proc1:Lås A

proc2:Lås B

proc1:Lås B - begynder at vente, indtil proc2 frigiver B

proc2:Lås A - begynder at vente, indtil proc1 frigiver A

Ingen af ​​dem bliver nogensinde færdige. Det er et dødvande. I praksis resulterer dette normalt i timeout-fejl, da det ikke ønskes at have nogen forespørgsel hængende for evigt, og det underliggende system (f.eks. databasen) vil dræbe forespørgsler, der ikke afsluttes i tide.

Et virkeligt eksempel på dødvande er, når du låser dine husnøgler i din bil og dine bilnøgler i dit hus.



  1. Optager char / varchar / text / longtext kolonner i MySQL fuld størrelse i filsystemet selv for delvist udfyldte celler?

  2. Forskellen mellem flydende og decimal datatype

  3. Find antallet af kolonner i en tabel

  4. Hvordan kan jeg opdatere to tabeller i én forespørgsel?