Έλεγχος συγχρονικότητας Μέρος 1 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη με βάση slides από A. Silberschatz, H. Korth, S. Sudarshan, Database System Concepts, 5 th edition
Έλεγχος συγχρονικότητας Διάφορες δοσοληψίες εκτελούνται ταυτόχρονα στη ΒΔ απομόνωση μπορεί να μην διατηρείται Έλεγχος αλληλεπίδρασης μεταξύ ταυτόχρονων δοσοληψιών Έλεγχος συγχρονικότητας Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 2
Πρωτόκολλα βασισμένα σε κλειδώματα Ένα κλείδωμα είναι ένας μηχανισμός για να ελέγχουμε τη ταυτόχρονη προσπέλαση στα δεδομένα Τα δεδομένα μπορούν να κλειδωθούν σε δύο καταστάσεις: 1. Αποκλειστική (exclusive (X) mode). Τα δεδομένα μπορούν να διαβαστούν καθώς και να γραφτούν. X-lock απαιτείται χρησιμοποιώντας εντολή lock-x. 2. Κοινόχρηστη (shared (S) mode). Τα δεδομένα μπορούν να διαβαστούν μόνο. S-lock απαιτείται χρησιμοποιώντας εντολή lock-s. Οι αιτήσεις κλειδώματος γίνονται στο διαχειριστή ταυτόχρονου ελέγχου. Η δοσοληψία μπορεί να προχωρήσει μόνο αφού ικανοποιηθεί η αίτηση. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 3
Πρωτόκολλα βασισμένα σε κλειδώματα (2) Πίνακας συμβατότητας κλειδώματος (Lock-compatibility matrix) Σε μία δοσοληψία μπορεί να παραχωρηθεί κλείδωμα σ ένα αντικείμενο εάν το αιτούμενο κλείδωμα είναι συμβατό με τα κλειδώματα που ήδη έχουν δοθεί στο αντικείμενο από άλλες δοσοληψίες Οποιοσδήποτε αριθμός από δοσοληψίες μπορεί να έχει κοινόχρηστα κλειδώματα σ ένα αντικείμενο Εάν μία δοσοληψία έχει αποκλειστικό κλείδωμα σε ένα αντικείμενο καμία άλλη δοσοληψία δεν μπορεί να διατηρεί κλείδωμα στο αντικείμενο. Εάν ένα κλείδωμα δεν μπορεί να παραχωρηθεί, η αιτούμενη δοσοληψία μπαίνει σε αναμονή μέχρις ότου όλα τα μη συμβατά κλειδώματα που διατηρούνται από άλλες δοσοληψίες απελευθερωθούν. Στη συνέχεια το κλείδωμα παραχωρείται. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 4
Πρωτόκολλα βασισμένα σε κλειδώματα (3) Παράδειγμα μίας δοσοληψίας που εκτελεί κλείδωμα: T1: lock-χ(β); read (B); Β=Β-50; write(b); unlock(b); lock-x(a); read (A); A=A+50; write(a); unlock(a); T2: lock-s(a); read (A); unlock(a); lock-s(b); read (B); unlock(b); display(a+b) Κλείδωμα όπως παραπάνω δεν είναι αρκετό για να διασφαλίσει σειριακή διάταξη if A and B get updated in-between the read of A and B, the displayed sum would be wrong. Σειριακή εκτέλεση <Τ1, Τ2> Α+Β=300 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 5
T1 T2 Έλεγχος συγχρονικότητας Α=100, Β=200 Με βάση το Χρονοπρόγραμμα Α+Β=250 λάθος lock-χ(β); read (B); Β=Β-50; write(b); unlock(b); lock-s(a); grant-x(b, T1) grant-s(a, T2) Τ1 ξεκλείδωσε τα δεδομένα Β πολύ νωρίς read (A); unlock(a); lock-s(b); grant-s(b, T2) lock-x(a); read (B); unlock(b); display(a+b) grant-x(a, T1) read (A); A=A+50; write(a); unlock(a); Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 6
Παράδειγμα T1: lock-χ(β); read (B); Β=Β-50; write(b); unlock(b); lock-x(a); read (A); A=A+50; write(a); unlock(a); T2: lock-s(a); read (A); unlock(a); lock-s(b); read (B); unlock(b); display(a+b) T3: lock-χ(β); read (B); Β=Β-50; write(b); lock-x(a); read (A); A=A+50; write(a); unlock(b); unlock(a); T2: lock-s(a); read (A); lock-s(b); read (B); display(a+b); unlock(α); unlock(β); Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 7
Προβλήματα των πρωτοκόλλων βασισμένων σε κλείδωμα (1) Υποθέτουμε το χρονοπρόγραμμα Ούτε η T 3 ούτεt 4 μπορούν να προχωρήσουν εκτελώντας lock-s(b) κάνει τη T 4 να περιμένει για τη T 3 να αποδεσμεύσει το κλείδωμα της στο B, ενώ εκτελώντας το lock-x(a) κάνει τη T 3 να περιμένει για το T 4 να ελευθερώσει το κλείδωμα του στο A. Μία τέτοια κατάσταση ονομάζεται αδιέξοδο (deadlock) Για να διαχειριστούμε ένα αδιέξοδο, πρέπει μία από τις T 3 ή T 4 να αναιρεθεί και να αποδεσμευτούν τα κλειδώματα τους. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 8
Προβλήματα των πρωτοκόλλων βασισμένων σε κλείδωμα (2) Η πιθανότητα για αδιέξοδο υπάρχει στα περισσότερα πρωτόκολλα κλειδώματος. Starvation είναι επίσης πιθανό εάν ο διαχειριστής ταυτόχρονου ελέγχου δεν είναι καλά σχεδιασμένος. Παράδειγμα: Μία δοσοληψία μπορεί να περιμένει για ένα X-lock πάνω σ ένα αντικείμενο, ενώ μία ακολουθία από άλλες δοσοληψίες απαιτούν και τους παραχωρηθεί ένα S-lock πάνω στο ίδιο αντικείμενο. Η ίδια δοσοληψία επανειλημμένα αναιρείται εξαιτίας αδιεξόδων. Ο διαχειριστής ταυτόχρονου ελέγχου μπορεί να σχεδιαστεί για να αποφύγουμε starvation. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 9
Πρωτόκολλο κλειδώματος Ένα πρωτόκολλο κλειδώματος είναι ένα σύνολο από κανόνες που ακολουθούνται απ όλες τις δοσοληψίες ενώ αιτούνται και αποδεσμεύουν κλειδώματα. Πρωτόκολλα κλειδώματος περιορίζουν το σύνολο δυνατών χρονοπρογραμμάτων. Νόμιμο χρονοπρόγραμμα κάτω από κάποιο πρωτόκολλο κλειδώματος: S είναι ένα πιθανό χρονοπρόγραμμα για ένα σύνολο από δοσοληψίες που ακολουθούν τους κανόνες του πρωτοκόλλου κλειδώματος Πρωτόκολλο κλειδώματος διασφαλίζει τη σειριακή διάταξη σύγκρουσης εάν και μόνο εάν οποιαδήποτε νόμιμα χρονοπρογράμματα μπορούν να μπουν σε σειριακή διάταξη ως προς σύγκρουση Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 10
Δύο φάσεων πρωτόκολλο κλειδώματος Πρωτόκολλο που διασφαλίζει σειριακή διάταξη ως προς τις συγκρούσεις. Φάση 1: Φάση ανάπτυξης η δοσοληψία μπορεί να πάρει κλειδώματα η δοσοληψία δεν μπορεί να ελευθερώσει κάποιο κλείδωμα Φάση 2: Φάση σύμπτυξης η δοσοληψία μπορεί να ελευθερώσει κλειδώματα η δοσοληψία δεν μπορεί να πάρει νέα κλειδώματα Το πρωτόκολλο εξασφαλίζει σειριακή διάταξη. Μπορεί να αποδειχθεί ότι οι δοσοληψίες μπορεί να είναι σε σειριακή διάταξη σύμφωνα με τη σειρά των σημείων κλειδώματος τους (δηλ. σημείο όπου μία δοσοληψία αποκτά το τελικό της κλείδωμα). Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 11
Δύο φάσεων πρωτόκολλο κλειδώματος (2) Ζήτα κλείδωμα πριν εκτελέσεις κάποια πράξη: Για να διαβάσεις, πρέπει να πάρεις ένα Shared lock (S-lock). Είναι δυνατόν να υπάρχουν πολλές δοσοληψίες με S-lock για το ίδιο αντικείμενο Για να γράψεις, πρέπει να πάρεις ένα exclusive lock (X-lock). Αν μια δοσοληψία έχει X-lock για ένα αντικείμενο, απαγορεύεται οποιαδήποτε άλλη να έχει κάποιο κλείδωμα για το αντικείμενο αυτό Δεν μπορείς να ξεκλειδώσεις αντικείμενο μέχρι να έχεις πάρει και το τελευταίο κλείδωμα που χρειάζεσαι Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 12
Πρωτόκολλο 2 φάσεων? T 9 lock-x(b) read(b) B := B - 50 write(b) lock-x(a) read(a) A := A + 50 write(a) unlock(b) unlock(a) T 10 lock-s(a) read(a) lock-s(b) unlock(a) unlock(b) display(a + B) T 7 lock-x(b) read(b) B := B - 50 write(b) unlock(b) lock-x(a) read(a) A := A + 50 write(a) unlock(a) T 8 lock-s(a) read(a) unlock(a) lock-s(b) unlock(b) display(a + B) NOT LEGAL LEGAL LEGAL NOT LEGAL Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 13
Μερικό χρονοπρόγραμμα κάτω από κλείδωμα δύο φάσεων Kλείδωμα δύο φάσεων δεν διαβεβαιώνει ελευθερία από αδιέξοδα Διαδοχικές αναιρέσεις είναι δυνατές κάτω από κλείδωμα δύο φάσεων. Αποτυχία της Τ5 μετά το read(a) οδηγεί σε αποτυχία Τ6, Τ7 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 14
Δύο φάσεων πρωτόκολλο κλειδώματος Για να αποφύγουμε διαδοχικές αναιρέσεις ακολουθούμε ένα τροποποιημένο πρωτόκολλο καλούμενο περιορισμένο δύοφάσεων κλείδωμα (strict two-phase locking). Μία δοσοληψία μπορεί να κρατήσει όλα τα αποκλειστικά κλειδώματα μέχρι να κάνει commit/abort. Όποια δεδομένα γράφονται από μία δοσοληψία που δεν έχει εκτελεστεί πλήρως, κλειδώνονται σε αποκλειστική κατάσταση μέχρι να ολοκληρωθεί η δοσοληψία. Οποιαδήποτε άλλη δοσοληψία εμποδίζεται να διαβάσει δεδομένα. Αυστηρό δύο-φάσεων κλείδωμα είναι ακόμα πιο περιοριστικό: όλα τα κλειδώματα κρατούνται μέχρι την ολοκλήρωση/αναίρεση(commit/abort). Στο πρωτόκολλο αυτό οι δοσοληψίες μπορούν να γίνουν σειριακές με βάση τη σειρά με την οποία κάνουν commit. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 15
Μετατροπές κλειδώματος Δύο φάσεων κλείδωμα με μετατροπές κλειδώματος: Πρώτη φάση: Μπορεί να αποκτήσει lock-s σε ένα αντικείμενο Μπορεί να αποκτήσει lock-x στο αντικείμενο Μπορεί να μετατρέψει ένα lock-s σε ένα lock-x (upgrade) Δεύτερη φάση: μπορεί να αποδεσμεύσει ένα lock-s μπορεί να αποδεσμεύσει ένα lock-x Μπορεί να μετατρέψει ένα lock-x σ ένα lock-s (downgrade) Το πρωτόκολλο αυτό επιβεβαιώνει δυνατότητα σειριακής διάταξης. Πάλι όμως εξαρτάται από το προγραμματιστή να εισάγει διάφορες εντολές κλειδώματος. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 16
Μη πλήρες χρονοπρόγραμμα με μετατροπή κλειδώματος Τ8: read(a1); read(a2);.. read(an); write(a1) T9: read(a1) read(a2) display(a1+a2) Η Τ8 χρειάζεται κλείδωμα μόνο στο τέλος όταν γράφει το α1 Μπορεί να κλειδώσει το α1 σε κοινόχρηστη χρήση και μετά να αλλάξει το κλείδωμα σε αποκλειστική χρήση Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 17