DEV Community

nikosst
nikosst

Posted on

Deadlocks γιατί εμφανίζονται και πώς τα μειώνουμε

Μια συναλλαγή μπορεί να προστατεύει προσωρινά δεδομένα από ασύμβατες ενέργειες άλλων συναλλαγών.

Αυτή η προστασία ονομάζεται κλείδωμα — lock.

Αν μια άλλη εργασία χρειάζεται τα ίδια δεδομένα, μπορεί να περιμένει.

Αναμονή και deadlock

Η απλή αναμονή μπορεί να εξελιχθεί φυσιολογικά:

Η A κρατά μια γραμμή.
Η B περιμένει.
Η A ολοκληρώνεται.
Η B συνεχίζει.
Enter fullscreen mode Exit fullscreen mode

Αυτό λέγεται blocking.

Σε ένα deadlock, η αναμονή γίνεται κύκλος:

Η A κρατά τη γραμμή 1 και περιμένει τη γραμμή 2.

Η B κρατά τη γραμμή 2 και περιμένει τη γραμμή 1.
Enter fullscreen mode Exit fullscreen mode

Καμία δεν μπορεί να συνεχίσει χωρίς παρέμβαση.

Ο SQL Server επιλέγει μια συναλλαγή, την ακυρώνει με rollback και επιστρέφει το σφάλμα 1205.

Η άλλη μπορεί πλέον να συνεχίσει. Τεκμηρίωση Microsoft

Παράδειγμα πρόληψης

Έστω ότι δύο εργασίες ενημερώνουν τους ίδιους δύο μετρητές.

Αν η μία ξεκινά από τον μετρητή 1 και η άλλη από τον 2, μπορεί να σχηματιστεί ο προηγούμενος κύκλος.

Χρησιμοποιούμε την ίδια σειρά και στις δύο:

BEGIN TRANSACTION;

UPDATE Counters
SET Value = Value + 1
WHERE Id = 1;

UPDATE Counters
SET Value = Value + 1
WHERE Id = 2;

COMMIT;
Enter fullscreen mode Exit fullscreen mode

Έτσι αφαιρούμε τη συγκεκριμένη αιτία του deadlock. Μπορεί ακόμη να υπάρξει απλή αναμονή.

Τι βοηθά στην πράξη

  • Ίδια σειρά πρόσβασης στα δεδομένα.
  • Μικρή διάρκεια συναλλαγής.
  • Αποστολή email και κλήσεις εξωτερικών υπηρεσιών έξω από τη συναλλαγή.
  • Αναζήτηση και ενημέρωση μόνο των απαραίτητων δεδομένων.

Τι επαναλαμβάνουμε μετά την αποτυχία

Η συναλλαγή που ακυρώθηκε χρειάζεται νέα προσπάθεια από την αρχή.

Επαναλαμβάνουμε ολόκληρη τη συναλλαγή, με καθαρή κατάσταση, περιορισμένες προσπάθειες και μικρή αναμονή μεταξύ τους.

Αν τα deadlocks επαναλαμβάνονται συχνά, εξετάζουμε την καταγραφή τους, γνωστή ως deadlock graph. Δείχνει ποιες εντολές και ποια δεδομένα συμμετείχαν στον κύκλο.

Η αυτόματη επανάληψη βοηθά σε περιστασιακές συγκρούσεις. Οι συχνές αποτυχίες χρειάζονται διάγνωση της αιτίας. Οδηγός Microsoft για deadlocks

Top comments (0)