![]() |
Το λήμμα παραθέτει τις πηγές του αόριστα, χωρίς παραπομπές. |
Στις βάσεις δεδομένων (ΒΔ) και σε διαδικασίες συναλλαγών το Κλείδωμα δύο Φάσεων (2PL) είναι ένα πρωτόκολλο κλειδώματος ελέγχου ταυτοχρονισμού ή μηχανισμός ο οποίος μπορεί να εγγυηθεί σειριοποιησιμότητα. Χρησιμοποιώντας κλειδώματα που μπλοκάρουν διαδικασίες το 2PL μπορεί να προκαλέσει αδιέξοδα τα οποία προκαλούνται από αμοιβαίο μπλοκάρισμα δύο ή περισσοτέρων συναλλαγών.
Το 2PL είναι μια υπερκλάση του SS2PL το οποίο χρησιμοποιείται ευρέως για έλεγχο ταυτοχρονισμού σε συστήματα ΒΔ από το 1970 έως σήμερα. Το SS2PL έχει πολλές παραλλαγές.
Υπόψη ότι το 2PL είναι διαφορετικό από το 2PC (two-phase commit protocol).
Ένας από τους βασικότερους μηχανισμούς ταυτοχρονισμού στηρίζεται στη χρήση κλειδωμάτων. Σε μια βάση δεδομένων, ένα κλείδωμα μπορεί να χρειαστεί σε ένα αντικείμενο της από την συναλλαγή πριν να αποκτηθεί πρόσβαση σε αυτό. Η σωστή χρήση κλειδώματος μπορεί να αποτρέψει μη επιθυμητά, λάθη και ασυνεπή λειτουργίες σε κοινόχρηστες πηγές από ταυτόχρονες συναλλαγές. Όταν ένα αντικείμενο είναι κλειδωμένο από μία συναλλαγή και μία άλλη συναλλαγή χρειάζεται πρόσβαση σε αυτό, το παρών κλείδωμα και ο τύπος της προσδοκώμενης πρόσβασης ελέγχονται από το σύστημα. Ένα κλείδωμα αντιστοιχεί σε ένα τμήμα δεδομένων και πρόκειται για μια μεταβλητή που περιγράφει την κατάσταση του τμήματος των δεδομένων σε σχέση με τις λειτουργίες που ενεργούν στα συγκεκριμένα δεδομένα.
Υπάρχουν 2 βασικοί τύποι κλειδωμάτων:
Ο μηχανισμός κλειδωμάτων λειτουργεί ως εξής:
Υπάρχουν πολλές παραλλαγές αυτών των κλειδωμάτων με αντίστοιχες παραλλαγές συμπεριφοράς κλειδωμάτων. Αν ένα κλείδωμα μπλοκάρει ένα άλλο κλείδωμα τότε αυτό ορίζεται ως μη συμβατά κλειδώματα (σύγκρουση κλειδωμάτων). Παρακάτω παρουσιάζεται ο πίνακας συγκρούσεων σύμφωνα με τους παραπάνω κανόνες:
Υπάρχουν πολλές παραλλαγές αυτών των κλειδωμάτων με αντίστοιχες παραλλαγές συμπεριφοράς κλειδωμάτων. Αν ένα κλείδωμα μπλοκάρει ένα άλλο κλείδωμα τότε αυτό ορίζεται ως μη συμβατά κλειδώματα (σύγκρουση κλειδωμάτων). Παρακάτω παρουσιάζεται ο πίνακας συγκρούσεων σύμφωνα με τους παραπάνω κανόνες:
Τύπος κλειδώματος | κλείδωμα-ανάγνωση | κλείδωμα-εγγραφή |
---|---|---|
κλείδωμα-ανάγνωση | X | |
κλείδωμα-εγγραφή | X | X |
Με χρήση του παραπάνω μηχανισμού κλειδώματος υπάρχει ενδεχόμενο τα δεδομένα μας να είναι ασυνεπή, δηλαδή το αποτέλεσμα του χρονοπρογράμματος δεν είναι ίδιο με ένα σειριακό χρονοπρόγραμμα. Το πρόβλημα εντοπίζεται στον τρόπο δέσμευσης και απελευθέρωσης των κλειδωμάτων από τις συναλλαγές. Ένας μηχανισμός κλειδώματος πρέπει να ικανοποιεί ορισμένους κανόνες που να εγγυώνται την συνέπεια των δεδομένων. Οι κανόνες αυτοί ορίζουν ένα πρωτόκολλο κλειδώματος το οποίο εγγυάται ότι το χρονοπρόγραμμα είναι σειριοποιήσιμο.
Σύμφωνα με το 2PL πρωτόκολλο μια συναλλαγή διαχειρίζεται τα κλειδώματα της σε δυο διακριτές φάσεις:
Η σειριοποιησιμότητα είναι εγγυημένη για ένα πρόγραμμα συναλλαγών που υπακούουν το πρωτόκολλο. Το 2PL schedule class χαρακτηρίζεται σαν η κλάση όλων των προγραμματισμένων συναλλαγών με διεργασίες read-write οι οποίες δημιουργούνται από το πρωτόκολλο 2PL.
Σε μια συναλλαγή στο τέλος της φασης-1, είναι ασφαλές διευκρινισμένη μόνο όταν μια συναλλαγή είναι στη φάση «έτοιμη» σε όλες της διεργασίες (read, write) της. (Η διεργασία έχει τελειώσει και είναι έτοιμη να δεσμευτεί και δεν μπορεί να πάρει περεταίρω κλειδώματα). Σε αυτή την περίπτωση η φάση-2 μπορεί να τελειώσει αμέσως αφού δεν χρειάζεται να συνεχίσει. Επίσης αν πολλές διεργασίες περιπλέκονται τότε χρειάζεται ένα σημείο συγχρονισμού μεταξύ τους για να διευκρινίζει τη φάση-1για όλες τους έτσι ώστε να αρχίσει να απελευθερώνει κλειδώματα στη φάση-2(Αλλιώς είναι πολύ πιθανό η σειριοποιησιμότητα και το 2PL να παραβιαστούν). Ένα τέτοιο σημείο συγχρονισμού κοστίζει πολύ (περιπλέκοντας ένα κατανεμημένο πρωτόκολλο παρόμοιο με το atomic commitment) και το τέλος της φάσης-1 αναστέλλεται για να συγχωνευτεί με το τέλος της συναλλαγής όπου και πάλι δεν χρειάζεται η φάση-2.
Η κλάση χρονοπρογραμμάτων αυστηρού πρωτόκολλου 2PL είναι η τομή της κλάσης 2PL με την κλάση χρονοπρογραμμάτων που έχουν τις ιδιότητες Strictness.
Για να είναι συμβατή μια συναλλαγή με το S2PL πρέπει να είναι επίσης συμβατή με το 2PL και να απελευθερώσει τα κλειδώματα-εγγραφή μόλις τελειώσει.
Αντίθετα τα κλειδώματα-ανάγνωση απελευθερώνονται κανονικά κατά τη διάρκεια της φάσης-2. Υλοποιώντας γενικά το S2PL απαιτεί σαφή υποστήριξη του τέλους της φάσης-1, διαχωρισμό από το τέλος της συναλλαγής και δεν έχει ακόμη υλοποιηθεί ένα τέτοιο προϊόν. Το αυστηρό 2PL πρωτόκολλο είναι μία ειδική περίπτωση 2PL.
Για να συνάδει μια συναλλαγή με το SS2PL το πρωτόκολλο κλειδώματος απελευθερώνει και write και read κλειδώματα μόνο όταν η συναλλαγή τελειώσει μαζί τους. Αυτό το πρωτόκολλο συνάδει επίσης με τους κανόνες του S2PL. Μια συναλλαγή που υπακούει στο SS2PL μπορεί να την δει κανείς σαν να έχει την φάση - 1 (βλέπε παραπάνω 2PL) η οποία διαρκεί καθ’ όλη την διάρκεια εκτέλεσης της συναλλαγής και καθόλου στην φάση - 2. Έτσι βλέπουμε ότι στην ουσία μένει μόνο μια φάση και το όνομα 2PL παρέμεινε διότι έχει καθιερωθεί έκτοτε. Η SS2PL ενός χρονοπρογράμματος αποκαλείται και rigorousness. Είναι επίσης το όνομα της κλάσης των χρονοπρογραμμάτων που έχουν αυτή την ιδιότητα και επίσης ένα SS2PL χρονοπρόγραμμα αποκαλείται και αυστηρό χρονοπρόγραμμα. Ο όρος rigorousness δεν έχει να κάνει με τον μύθο των δυο φάσεων και είναι ανεξάρτητος από κάθε είδους μηχανισμό κλειδώματος. Η ιδιότητα του μηχανισμού κλειδώματος αναφέρεται και σαν αυστηρό 2PL.
To SS2PL είναι ειδική περίπτωση του S2PL λόγου χάριν η κλάση χρονοπρογραμμάτων SS2PL είναι υποκλάση του S2PL.
Το SS2PL είναι ο κατ’ επιλογήν έλεγχος ταυτοχρονισμού για τα περισσότερα συστήματα ΒΔ και χρησιμοποιείται από το 1970. Έχει αποδειχτεί ότι είναι αποδοτικός μηχανισμός σε πολλές περιπτώσεις και παρέχει σειριοποιησιμότητα, αυστηρότητα και commitment ordering, που μπορεί να χρησιμοποιηθεί και σε κατανεμημένα περιβάλλοντα όπου απαιτείται καθολική σειριοποιησιμότητα. Όντας ένα υποσύνολο Commitment Ordering μια αποδοτική υλοποίηση κατανεμημένου SS2PL υπάρχει χωρίς κατανεμημένη διεύθυνση κλειδωμάτων, καθώς κατανεμημένα αδιέξοδα επιλύονται αυτομάτως. Το γεγονός ότι το SS2PL υιοθετείται σε πολλαπλά συστήματα ΒΔ διασφαλίζει καθολική σειριοποιησιμότητα και αυτό είναι γνωστό πολύ πιο πριν από την ανακάλυψη του commitment ordering, αλλά μόνο όταν εμφανίστηκε το commitment ordering έγινε κατανοητός ο ρόλος του πρωτόκολλου ατομικής δέσμευσης (atomic commitment) για διατήρηση καθολικής σειριοποιησιμότητας αλλά και για παρακολούθηση της αυτόματης κατανεμημένης επίλυσης αδιεξόδων. Για την ακρίβεια το SS2PL κληρονομεί ιδιότητες της ανακτησιμότητας και το Commitment Ordering είναι πιο σημαντικό από το να είναι ένα υποσύνολο του 2PL, το οποίο από μόνο του δεν παρέχει SS2PL κάποιας ποιότητας.
Υπάρχουν πολλές παραλλαγές του SS2PL οι οποίες αξιοποιούν πολλούς τύπους κλειδώματος με ποικίλες επεξηγήσεις για κάθε κατάσταση, οι οποίες περιλαμβάνουν περιπτώσεις αλλαγής τύπου κλειδώματος κατά την διάρκεια μιας συναλλαγής.
Σχόλια:
Τύπος κλειδώματος | κλείδωμα-ανάγνωση | κλείδωμα-εγγραφή |
---|---|---|
κλείδωμα-ανάγνωση | ||
κλείδωμα-εγγραφή | X | X |
Τα κλειδώματα μπλοκάρουν ενέργειες που έχουν να κάνουν με πρόσβαση αντικειμένων. Το αμοιβαίο μπλοκάρισμα μεταξύ συναλλαγών είναι ένα αδιέξοδο και η εκτέλεση αυτών των συναλλαγών σταματήσει και δεν υπάρχει περάτωση. Έτσι τα αδιέξοδα πρέπει να επιλυθούν για να ολοκληρωθούν αυτές οι συναλλαγές και να απελευθερώσουν τους πόρους του συστήματος. Ένα αδιέξοδο είναι ένας πιθανός κύκλος στο γράφο σειριοποιησιμότητας ο οποίος μπορεί να προκύψει χωρίς μπλοκάρισμα όταν πραγματοποιηθούν οι συγκρούσεις. Ένα αδιέξοδο μπορεί να επιλυθεί κάνοντας abort την συναλλαγή η οποία μπορεί να οδηγήσει σε κύκλο. Αυτή η συναλλαγή εντοπίζεται χρησιμοποιώντας ένα γράφο αναμονής (ένας γράφος συγκρούσεως οι οποίες μπλοκάρονται από κλειδώματα – πρόκειται για έναν κατευθυνόμενο γράφο ο οποίος χρησιμοποιείται για την αποφυγή αδιεξόδων), ο οποίος υποδεικνύει ποιες συναλλαγές είναι έτοιμες να ελευθερώσουν το κλείδωμα τους και ποιες θέλουν να αναλάβουν το αντικείμενο και όταν υπάρχει κύκλος έχουμε αδιέξοδο. Κάνοντας abort μια συναλλαγή σε ένα κύκλο τότε απαλείφεται ο κύκλος. Συναλλαγές οι οποίες έχουν γίνει abort για επίλυση αδιεξόδων κάνουν επανεκκίνηση και εκτελούνται αμέσως.
Σε κατανεμημένα περιβάλλοντα απαιτείται ένα πρωτόκολλο ατομικής δέσμευσης (atomic commitment) για ατομικότητα (συνήθως το 2PC). Όταν ανακτημένα δεδομένα κατανέμονται μεταξύ συναλλαγών που χρησιμοποιούν το 2PC και έπειτα κατανέμονται καθολικά αδιέξοδα (δηλαδή αδιέξοδα τα οποία εμπλέκουν δυο συναλλαγές στο 2PC) τα οποία λύνονται αυτομάτως.
Όταν το SS2PL χρησιμοποιείται σε κατανεμημένο περιβάλλον τότε τα καθολικά αδιέξοδα για να κλειδώσουν δημιουργούν voting-deadlocks στο 2PC και επιλύονται αυτόματα από το 2PC (βλέπε commitment ordering). Γενικά στο 2PL τα καθολικά αδιέξοδα επιλύονται παρομοίως από το πρωτόκολλο σημείο συγχρονισμού στο τέλος της φάσης – 1 σε μια κατανεμημένη συναλλαγή (το σημείο συγχρονισμού επιτυγχάνεται με «voting» (το οποίο σημειώνεται το τέλος της φάσης - 1) και διαδίδεται στα μέρη της συναλλαγής όπως σε μια κατανεμημένη συναλλαγή με τον ίδιο τρόπο σαν ένα σημείο απόφασης στην ατομική δέσμευση (atomic commitment). Κατ’ αναλογία με το σημείο απόφασης στο Commitment Ordering μια συγκρουόμενη ενέργεια στο 2PL δεν μπορεί να συμβεί πριν το τέλος της φάσης – 1 στο σημείο συγχρονισμού, και αυτό έχει το ίδιο αποτέλεσμα με το voting-deadlock για περιπτώσεις αδιεξόδων καθολικής πρόσβασης δεδομένων. Το voting-deadlock λύνεται αυτόματα από το πρωτόκολλο κάνοντας abort μερικές συναλλαγές που εμπλέκονται σε αυτό, χάνοντας ένα vote, χρησιμοποιώντας timeout).
Σε κατανεμημένα περιβάλλοντα όπου τα ανακτήσιμα δεδομένα δεν διαμοιράζονται ανάμεσα στα μέλη του 2PC χρειάζονται ειδικές τεχνικές για να επιλύσουν τα καθολικά αδιέξοδα.