©Silberschatz, Korth and Sudarshan1 ΒΔ ΙΙ: Διαχείριση συναλλαγών Διαχείριση Συναλλαγών (Transaction Management) Ορισμός της συναλλαγής Καταστάσεις μιας συναλλαγής Υλοποίηση της Ατομικότητας και της Μονιμότητας – Atomicity and Durability Ταυτοχρονικές εκτελέσεις - Concurrency Σειριοποιησιμότητα - Serializability Δυνατότητα Επαναφοράς (ή ανάκαμψης) - Recoverability Υλοποίηση της Απομόνωσης - Isolation Ορισμός των συναλλαγών στην SQL Έλεγχος για σειριοποιησιμότητα Πηγή: Silberschatz et al., “Database System Concepts”, 4 th ed. (Chapter 15) Μετάφραση στα Ελληνικά: © Γιάννης Θεοδωρίδης,
©Silberschatz, Korth and Sudarshan2 ΒΔ ΙΙ: Διαχείριση συναλλαγών Ορισμός της συναλλαγής Μια συναλλαγή (transaction) είναι ένα τμήμα της εκτέλεσης προγράμματος, που προσπελαύνει και πιθανόν ενημερώνει διάφορα αντικείμενα δεδομένων. Μια συναλλαγή πρέπει να βλέπει μια συνεπή βάση και όταν επικυρωθεί η συναλλαγή, η βάση δεδομένων πρέπει να είναι πάλι συνεπής. Κατά τη διάρκεια της συναλλαγής η βάση μπορεί να είναι ασυνεπής. Δυο βασικά θέματα πρέπει να αντιμετωπιστούν: Διαφόρων ειδών αποτυχίες, όπως αποτυχίες υλικού και πτώσεις συστήματος (crash) Η ταυτόχρονη εκτέλεση πολλαπλών συναλλαγών.
©Silberschatz, Korth and Sudarshan3 ΒΔ ΙΙ: Διαχείριση συναλλαγών Ιδιότητες ACID Για να προστατέψουμε την ακεραιότητα των δεδομένων, το σύστημα της βάσης δεδομένων πρέπει να εγγυάται: Ατομικότητα (Atomicity). Είτε όλες οι πράξεις της συναλλαγής ανακλώνται στη βάση δεδομένων είτε καμία. Συνέπεια (Consistency). Η εκτέλεση της συναλλαγής σε απομόνωση προστατεύει τη συνέπεια της βάσης δεδομένων. Απομόνωση (Isolation). Μολονότι πολλαπλές συναλλαγές μπορεί να εκτελούνται ταυτόχρονα, κάθε συναλλαγή πρέπει να αγνοεί τις υπόλοιπες ταυτοχρονικές συναλλαγές. Τα ενδιάμεσα αποτελέσματα μιας συναλλαγής πρέπει να «κρύβονται» από άλλες συναλλαγές που εκτελούνται ταυτοχρονικά. Δηλαδή, για κάθε ζεύγος συναλλαγών T i και T j, η T i θα νομίζει ότι είτε η T j, ολοκληρώθηκε πριν ξεκινήσει η T i ή ότι η T j ξεκίνησε αφού ολοκληρώθηκε η T i. Μονιμότητα (Durability). Αφού μια συναλλαγή ολοκληρωθεί επιτυχώς, οι αλλαγές που έχει κάνει στη βάση δεδομένων υπάρχουν, ακόμα και αν προκύψουν αποτυχίες του συστήματος.
©Silberschatz, Korth and Sudarshan4 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα μεταφοράς κεφαλαίου (1) Συναλλαγή για τη μεταφορά $50 από το λογαριασμό A στο λογαριασμό B: 1.read(A) 2.A := A – 50 3.write(A) 4.read(B) 5.B := B write(B) Απαίτηση συνέπειας: το άθροισμα των A και B δεν αλλάζει με την εκτέλεση της συναλλαγής. Απαίτηση ατομικότητας: εάν η συναλλαγή αποτύχει μετά το βήμα 3 και πριν το βήμα 6, το σύστημα πρέπει να διαβεβαιώσει ότι οι αλλαγές που έγιναν δεν αντανακλώνται στη βάση, αλλιώς θα οδηγηθούμε σε ασυνεπή βάση δεδομένων.
©Silberschatz, Korth and Sudarshan5 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα μεταφοράς κεφαλαίου (2) Απαίτηση διάρκειας: μόλις ο χρήστης ενημερωθεί ότι η συναλλαγή έχει ολοκληρωθεί (δηλ, έχει γίνει η μεταφορά των $50), οι αλλαγές στη βάση δεδομένων πρέπει να παραμείνουν παρά τις οποιεσδήποτε αποτυχίες. Απαίτηση απομόνωσης: εάν μεταξύ των βημάτων 3 και 6, επιτραπεί σε μια άλλη συναλλαγή να προσπελάσει τη μερικώς ενημερωμένη βάση, εκείνη θα δει μια ασυνεπή βάση δεδομένων (το άθροισμα A + B θα είναι μικρότερο από όσο θα έπρεπε να είναι). Μπορούμε να εγγυηθούμε για την απομόνωση, αν τρέξουμε τις συναλλαγές σειριακά, δηλαδή τη μια μετά την άλλη. Παρ’ όλα αυτά, η ταυτοχρονική εκτέλεση πολλαπλών συναλλαγών έχει σημαντικά πλεονεκτήματα, όπως θα δούμε.
©Silberschatz, Korth and Sudarshan6 ΒΔ ΙΙ: Διαχείριση συναλλαγών Καταστάσεις μιας συναλλαγής (1) Ενεργή (Active), η αρχική κατάσταση. Η συναλλαγή παραμένει σε αυτήν την κατάσταση όσο εκτελείται. Μερικώς επικυρωμένη (Partially committed), μετά την εκτέλεση και της τελευταίας εντολής. Αποτυχημένη (Failed), μετά τη διαπίστωση ότι δε μπορεί να προχωρήσει η κανονική εκτέλεση. Ακυρωμένη (Aborted), αφού έχει υποχωρήσει η συναλλαγή (rollback) και η βάση έχει επιστρέψει στην κατάσταση που ήταν πριν την έναρξη της συναλλαγής. Υπάρχουν τώρα δυο δυνατότητες: Επανέναρξη της συναλλαγής – μόνο αν δεν υπάρχει κάποιο εσωτερικό λογικό λάθος «Σκότωμα» της συναλλαγής. Επικυρωμένη ή ολοκληρωμένη (Committed), μετά την επιτυχή ολοκλήρωση.
©Silberschatz, Korth and Sudarshan7 ΒΔ ΙΙ: Διαχείριση συναλλαγών Καταστάσεις μιας συναλλαγής (2)
©Silberschatz, Korth and Sudarshan8 ΒΔ ΙΙ: Διαχείριση συναλλαγών Υλοποίηση της ατομικότητας και της μονιμότητας (1) Το τμήμα διαχείρισης επαναφοράς (recovery manager) ενός συστήματος βάσης δεδομένων υλοποιεί την υποστήριξη της ατομικότητας και της μονιμότητας. Το σχήμα shadow-database: Υποθέτει ότι μόνο μια συναλλαγή είναι ενεργή μια χρονική στιγμή. Ένας δείκτης που ονομάζεται db_pointer δείχνει συνεχώς στο τρέχον συνεπές αντίγραφο της βάσης. Όλες οι ενημερώσεις γίνονται στο αντίγραφο-σκιά (shadow copy) της βάσης και ο db_pointer ετοιμάζεται ώστε να δείχνει στο ενημερωμένο αντίγραφο-σκιά μόνο αφού η συναλλαγή μερικώς επικυρωθεί και όλες οι ενημερωμένες σελίδες αντανακλαστούν στο δίσκο. Στην περίπτωση αποτυχίας της συναλλαγής, μπορεί να χρησιμοποιηθεί το παλιό συνεπές αντίγραφο που δείχνεται από τον db_pointer και το αντίγραφο–σκιά μπορεί να διαγραφεί.
©Silberschatz, Korth and Sudarshan9 ΒΔ ΙΙ: Διαχείριση συναλλαγών Υλοποίηση της ατομικότητας και της μονιμότητας (2) Υποθέτει ότι οι δίσκοι δεν αποτυγχάνουν Είναι χρήσιμο για κειμενογράφους (text editors), αλλά ΔΕΝ είναι αποδοτικό για μεγάλες βάσεις δεδομένων: η εκτέλεση μιας απλής συναλλαγής απαιτεί την αντιγραφή ολόκληρης της βάσης δεδομένων. (Θα δούμε καλύτερα σχήματα στο κεφάλαιο «Σύστημα Επαναφοράς») Το shadow-database σχήμα:
©Silberschatz, Korth and Sudarshan10 ΒΔ ΙΙ: Διαχείριση συναλλαγών Ταυτοχρονικές εκτελέσεις Πολλαπλές συναλλαγές μπορούν να τρέχουν ταυτοχρονικά στο σύστημα. Τα πλεονεκτήματα που προκύπτουν είναι: Αύξηση της εκμετάλλευσης του επεξεργαστή και του δίσκου, που οδηγεί σε καλύτερη ρυθμαπόδοση (throughput) της συναλλαγής: μια συναλλαγή μπορεί να χρησιμοποιεί τη CPU την ώρα που μια άλλη διαβάζει από ή γράφει στο δίσκο. Μείωση του μέσου χρόνου απόκρισης (response time) για συναλλαγές: μικρές συναλλαγές δε χρειάζεται να περιμένουν να τελειώσουν μεγάλες συναλλαγές. Σχήματα ελέγχου ταυτοχρονισμού – μηχανισμοί για την επίτευξη απομόνωσης, δηλ, μηχανισμοί ελέγχου της αλληλεπίδρασης μεταξύ των ταυτοχρονικών συναλλαγών με στόχο την αποφυγή της καταστροφής της συνέπειας της βάσης δεδομένων. (Θα τα μελετήσουμε στο κεφάλαιο «Έλεγχος ταυτοχρονισμού»)
©Silberschatz, Korth and Sudarshan11 ΒΔ ΙΙ: Διαχείριση συναλλαγών Χρονοπρογράμματα (Schedules) Χρονοπρογράμματα (Schedules): ακολουθίες που δηλώνουν τη χρονολογική σειρά με την οποία εκτελούνται εντολές από ταυτοχρονικές συναλλαγές Ένα χρονοπρόγραμμα για ένα σύνολο από συναλλαγές πρέπει: να αποτελείται από το σύνολο των εντολών αυτών των συναλλαγών να διατηρεί τη σειρά με την οποία εμφανίζονται οι εντολές σε κάθε συναλλαγή ξεχωριστά.
©Silberschatz, Korth and Sudarshan12 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα χρονοπρογράμματος (1) Έστω η T 1 μεταφέρει $50 από το A στο B, και η T 2 αφαιρεί το 10% του A και το μεταφέρει στο B. Το ακόλουθο είναι ένα σειριακό χρονοπρόγραμμα (Χρονοπρόγραμμα 1), στο οποίο η T 1 ακολουθείται από την T 2. S1S1
©Silberschatz, Korth and Sudarshan13 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα χρονοπρογράμματος (2) Έστω T 1 και T 2 οι συναλλαγές που ορίστηκαν προηγουμένως. Το ακόλουθο χρονοπρόγραμμα (Χρονο-πρόγραμμα 2) δεν είναι σειριακό χρονοπρόγραμμα, αλλά είναι ισοδύναμο με το Χρονοπρόγραμμα 1. Και στα δυο χρονοπρογράμματα 1 και 2, διατηρείται το άθροισμα A + B. S2S2
©Silberschatz, Korth and Sudarshan14 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα χρονοπρογράμματος (3) Το ακόλουθο ταυτοχρονικό χρονοπρόγραμμα (Χρονο- πρόγραμμα 3) δε διατηρεί την τιμή του αθροίσματος A + B. S3S3
©Silberschatz, Korth and Sudarshan15 ΒΔ ΙΙ: Διαχείριση συναλλαγών Σειριοποιησιμότητα (Serializability) Βασική προϋπόθεση – Κάθε συναλλαγή διατηρεί τη συνέπεια της βάσης δεδομένων. Συνεπώς, η σειριακή εκτέλεση ενός συνόλου συναλλαγών διατηρεί τη συνέπεια της βάσης δεδομένων. Ένα (πιθανώς ταυτοχρονικό) χρονοπρόγραμμα είναι σειριοποιήσιμο (serializable) εάν είναι ισοδύναμο με ένα σειριακό χρονοπρόγραμμα. Λόγω των διαφορετικών μορφών ισοδυναμίας χρονοπρογραμμάτων, διακρίνουμε: 1.Σειριοποιησιμότητα βάσει συγκρούσεων (conflict serializability) 2. Σειριοποιησιμότητα βάσει όψεων (view serializability) Δε θεωρούμε λειτουργίες διαφορετικές από τις read και write εντολές και υποθέτουμε ότι οι συναλλαγές μπορούν να κάνουν αυθαίρετους υπολογισμούς σε δεδομένα σε τοπικούς καταχωρητές μεταξύ των εντολών ανάγνωσης και εγγραφής. Τα απλά χρονοπρογράμματα που θα παρουσιάσουμε στη συνέχεια αποτελούνται μόνο από εντολές read και write.
©Silberschatz, Korth and Sudarshan16 ΒΔ ΙΙ: Διαχείριση συναλλαγών Σειριοποιησιμότητα βάσει συγκρούσεων (1) - Conflict serializability Οι εντολές l i και l j των συναλλαγών T i και T j αντιστοίχως, συγκρούονται εάν και μόνο αν υπάρχει κάποιο αντικείμενο Q που προσπελαύνεται και από την l i και από την l j, και τουλάχιστον μια από αυτές τις εντολές έγραψε (write) στο Q. 1. l i = read(Q), l j = read(Q). l i και l j δε συγκρούονται. 2. l i = read(Q), l j = write(Q). Συγκρούονται. 3. l i = write(Q), l j = read(Q). Συγκρούονται. 4. l i = write(Q), l j = write(Q). Συγκρούονται. Διαισθητικά, μια σύγκρουση μεταξύ των l i και l j αναγκάζει μια (λογική) προσωρινή αναδιάταξη μεταξύ τους. Εάν οι l i και l j είναι συνεχόμενες σε ένα χρονοπρόγραμμα και δε συγκρούονται, τα αποτελέσματά τους θα παρέμεναν τα ίδια ακόμα κι αν είχαν ανταλλάξει θέσεις στο χρονοπρόγραμμα.
©Silberschatz, Korth and Sudarshan17 ΒΔ ΙΙ: Διαχείριση συναλλαγών Σειριοποιησιμότητα βάσει συγκρούσεων (2) Εάν ένα χρονοπρόγραμμα S μπορεί να μετασχηματιστεί σε ένα χρονοπρόγραμμα S´ με μια σειρά από αντιμεταθέσεις (swaps) μη συγκρουόμενων εντολών, λέμε ότι τα S και S´ είναι ισοδύναμα βάσει συγκρούσεων (conflict equivalent). Λέμε ότι ένα χρονοπρόγραμμα S είναι σειριοποιήσιμο βάσει συγκρούσεων (conflict serializable), εάν είναι ισοδύναμο βάσει συγκρούσεων με ένα σειριακό χρονοπρόγραμμα. Παράδειγμα χρονοπρογράμματος που δεν είναι σειριοποιήσιμο βάσει συγκρούσεων: T 3 T 4 read(Q) write(Q) write(Q) Δε μπορούμε να αντιμεταθέσουμε τις εντολές στο παραπάνω χρονοπρόγραμμα για να πετύχουμε είτε το σειριακό χρονοπρόγραμμα, είτε το σειριακό χρονοπρόγραμμα.
©Silberschatz, Korth and Sudarshan18 ΒΔ ΙΙ: Διαχείριση συναλλαγών Σειριοποιησιμότητα βάσει συγκρούσεων (3) Το Χρονοπρόγραμμα 2 (βλ. προηγουμένως) μπορεί να μετασχηματιστεί στο Χρονοπρόγραμμα 1, ένα σειριακό χρονοπρόγραμμα όπου η T 2 ακολουθεί την T 1, με μια σειρά από αντιμεταθέσεις μη συγκρουόμενων εντολών. Επομένως, το Χρονοπρόγραμμα 2 είναι σειριοποιήσιμο βάσει συγκρούσεων.
©Silberschatz, Korth and Sudarshan19 ΒΔ ΙΙ: Διαχείριση συναλλαγών Σειριοποιησιμότητα βάσει όψεων (1) – View serializability Έστω S και S´ δυο χρονοπρογράμματα με το ίδιο σύνολο από συναλλαγές. Τα S και S´ είναι ισοδύναμα βάσει όψεων (view equivalent) εάν ισχύουν οι τρεις παρακάτω συνθήκες: 1.Για κάθε αντικείμενο δεδομένων Q, εάν η συναλλαγή T i διαβάζει την αρχική τιμή του Q στο χρονοπρόγραμμα S, τότε η συναλλαγή T i πρέπει, στο χρονοπρόγραμμα S´, να διαβάζει επίσης την αρχική τιμή του Q. 2.Για κάθε αντικείμενο δεδομένων Q εάν η συναλλαγή T i εκτελεί read(Q) στο χρονοπρόγραμμα S, και αυτή η τιμή παράχθηκε από την συναλλαγή T j (εάν υπάρχει), τότε η συναλλαγή T i πρέπει στο χρονοπρόγραμμα S´ να διαβάζει επίσης την τιμή του Q, που παράχθηκε από τη συναλλαγή T j. 3.Για κάθε αντικείμενο δεδομένων Q, η συναλλαγή (εάν υπάρχει) που πραγματοποιεί το τελικό write(Q) στο χρονοπρόγραμμα S πρέπει να πραγματοποιεί επίσης το τελικό write(Q) στο χρονοπρόγραμμα S´.
©Silberschatz, Korth and Sudarshan20 ΒΔ ΙΙ: Διαχείριση συναλλαγών Σειριοποιησιμότητα βάσει όψεων (2) Ένα χρονοπρόγραμμα S είναι σειριοποιήσιμο βάσει όψεων (view serializable), εάν είναι ισοδύναμο βάσει όψεων με ένα σειριακό χρονοπρόγραμμα. Κάθε χρονοπρόγραμμα που είναι σειριοποιήσιμο βάσει όψεων είναι και σειριοποιήσιμο βάσει όψεων. Χρονοπρόγραμμα 4 — ένα χρονοπρόγραμμα που είναι σειριοποιήσιμο βάσει όψεων αλλά μη σειριοποιήσιμο βάσει συγκρούσεων. Κάθε χρονοπρόγραμμα που είναι σειριοποιήσιμο βάσει όψεων αλλά μη σειριοποιήσιμο βάσει συγκρούσεων έχει blind writes. S4S4
©Silberschatz, Korth and Sudarshan21 ΒΔ ΙΙ: Διαχείριση συναλλαγών Άλλες μορφές σειριοποιησιμότητας Το Χρονοπρόγραμμα 5 που δίδεται παρακάτω παράγει το ίδιο αποτέλεσμα όπως το σειριακό χρονοπρόγραμμα. Παρόλα αυτά δεν είναι ισοδύναμο με αυτό ούτε βάσει συγκρούσεων ούτε βάσει όψεων. Ο καθορισμός τέτοιων ισοδυναμιών απαιτεί την ανάλυση και άλλων λειτουργιών πλην των read και write. S5S5
©Silberschatz, Korth and Sudarshan22 ΒΔ ΙΙ: Διαχείριση συναλλαγών Δυνατότητα επαναφοράς (1) - Recoverability Το Χρονοπρόγραμμα 6) είναι μη επαναφέρσιμο εάν η T 9 επικυρωθεί αμέσως μετά την ανάγνωση. Εάν η T 8 ακυρωθεί, η T 9 θα έχει διαβάσει (και πιθανότατα θα έχει παρουσιάσει στο χρήστη) μια μη συνεπή κατάσταση της βάσης. Γι’ αυτό και οι βάσεις δεδομένων πρέπει να εξασφαλίζουν ότι τα χρονοπρογράμματα είναι επαναφέρσιμα. Ανάγκη αντιμετώπισης της επίδρασης των αποτυχιών των συναλλαγών στην περίπτωση ταυτοχρονικών συναλλαγών. Επαναφέρσιμο χρονοπρόγραμμα — εάν μια συναλλαγή Tj διαβάζει ένα αντικείμενο δεδομένων που έχει προηγουμένως γραφτεί από μια συναλλαγή Ti, η λειτουργία επικύρωσης (commit) της Ti εμφανίζεται πριν τη λειτουργία επικύρωσης της Tj. S6S6
©Silberschatz, Korth and Sudarshan23 ΒΔ ΙΙ: Διαχείριση συναλλαγών Δυνατότητα επαναφοράς (2) Διαδοχικές υποχωρήσεις (Cascading rollbacks) – η αποτυχία μίας συναλλαγής οδηγεί σε μια σειρά από υποχωρήσεις (rollbacks) και άλλων συναλλαγών. Ας θεωρήσουμε το ακόλουθο χρονοπρόγραμμα όπου καμιά συναλλαγή δεν έχει ακόμα επικυρωθεί (συνεπώς το χρονοπρόγραμμα είναι επαναφέρσιμο). Εάν η T10 αποτύχει, οι T11 και T12 πρέπει επίσης να κάνουν rollback. Τέτοιου είδους σενάρια, μπορεί να οδηγήσουν στην ακύρωση μιας μεγάλης ποσότητας δουλειάς που ήδη έχει γίνει. S7S7
©Silberschatz, Korth and Sudarshan24 ΒΔ ΙΙ: Διαχείριση συναλλαγών Δυνατότητα επαναφοράς (3) Χρονοπρογράμματα χωρίς υποχωρήσεις (Cascadeless) — δε μπορούν να συμβούν cascading rollbacks. Για κάθε ζευγάρι από συναλλαγές T i and T j στο οποίο η T j διαβάζει ένα αντικείμενο δεδομένων που γράφτηκε προηγουμένως από την T i, η λειτουργία επικύρωσης της T i εμφανίζεται πριν τη λειτουργία ανάγνωσης της T j. Κάθε cascadeless χρονοπρόγραμμα είναι επίσης επαναφέρσιμο. Είναι επιθυμητό να περιορίσουμε τα χρονοπρογράμματα που είναι cascadeless.
©Silberschatz, Korth and Sudarshan25 ΒΔ ΙΙ: Διαχείριση συναλλαγών Υλοποίηση της απομόνωσης (Isolation) Τα χρονοπρογράμματα πρέπει να είναι σειριοποιήσιμα βάσει συγκρούσεων ή όψεων και επαναφέρσιμα για τη διατήρηση της συνέπειας της βάσης. Επίσης προτιμούμε να είναι και cascadeless. Μια πολιτική στην οποία μπορεί να εκτελεστεί μόνο μια συναλλαγή τη φορά, δημιουργεί σειριακά χρονοπρογράμματα, αλλά παρέχει χαμηλό βαθμό ταυτοχρονισμού. Τα σχήματα ελέγχου ταυτοχρονισμού εξασφαλίζουν μια ισορροπία (tradeoff) μεταξύ του βαθμού ταυτοχρονισμού που επιτρέπουν και του ποσού του overhead που επιφέρουν. Μερικά σχήματα επιτρέπουν μόνο σειριοποιήσιμα βάσει συγκρούσεων χρονοπρογράμματα, ενώ κάποια άλλα επιτρέπουν μόνο σειριοποιήσιμα βάσει όψεων χρονοπρογράμματα, που όμως δεν είναι σειριοποιήσιμα βάσει συγκρούσεων.
©Silberschatz, Korth and Sudarshan26 ΒΔ ΙΙ: Διαχείριση συναλλαγών Ορισμός συναλλαγών στην SQL Η γλώσσα διαχείρισης δεδομένων πρέπει να περιλαμβάνει έναν τρόπο προσδιορισμού του συνόλου των ενεργειών που περιέχονται σε μια συναλλαγή. Στην SQL, μια συναλλαγή ξεκινά έμμεσα (χωρίς δηλαδή συγκεκριμένη εντολή). Μια συναλλαγή στην SQL τελειώνει με: Λειτουργία επικύρωσης (Commit work) επικυρώνει την τρέχουσα διαδικασία και ξεκινά μια νέα. Λειτουργία ακύρωσης (Rollback work) προκαλεί την ακύρωση της τρέχουσας διαδικασίας. Επίπεδα συνέπειας που ορίζονται από την SQL-92: Serializable — προκαθορισμένο Repeatable read Read committed Read uncommitted
©Silberschatz, Korth and Sudarshan27 ΒΔ ΙΙ: Διαχείριση συναλλαγών Επίπεδα συνέπειας στην SQL-92 Serializable — προκαθορισμένο Repeatable read — μπορούν να διαβαστούν μόνο επικυρωμένες εγγραφές και επαναλαμβανόμενες αναγνώσεις της ίδιας εγγραφής πρέπει να επιστρέφουν την ίδια τιμή. Παρ’ όλα αυτά, μια συναλλαγή μπορεί να μην είναι σειριοποιήσιμη – μπορεί να βρει κάποιες εγγραφές που εισήχθησαν από μια συναλλαγή αλλά να μη βρει άλλες. Read committed — μπορούν να διαβαστούν μόνο επικυρωμένες εγγραφές, αλλά επιτυχείς αναγνώσεις εγγραφών μπορεί να επιστρέψουν διαφορετικές (αλλά επικυρωμένες) τιμές. Read uncommitted — μπορούν να διαβαστούν ακόμα και μη επικυρωμένες εγγραφές. Χαμηλότεροι βαθμοί συνέπειας είναι χρήσιμοι για τη συλλογή προσεγγιστικής πληροφορίας για τη βάση, π.χ., στατιστικά για τον βελτιστοποιητή ερωτήσεων.
©Silberschatz, Korth and Sudarshan28 ΒΔ ΙΙ: Διαχείριση συναλλαγών Έλεγχος σειριοποιησιμότητας Θεωρήστε ένα χρονοπρόγραμμα ενός συνόλου συναλλαγών T 1, T 2,..., T n Γράφος προτεραιότητας (precedence graph) — ένας κατευθυνόμενος γράφος όπου οι κορυφές είναι οι συναλλαγές (ονόματα). Σχεδιάζουμε μια ακμή από την T i στην T j εάν οι δυο συναλλαγές συγκρούονται και η T i προσπέλασε το αντικείμενο δεδομένων στο οποίο συγκρούονται νωρίτερα. Μπορεί να προσθέτουμε μια ετικέτα στην ακμή με το όνομα του αντικειμένου που προσπελάστηκε. Παράδειγμα 1 y x
©Silberschatz, Korth and Sudarshan29 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα (Χρονοπρόγραμμα A) T 1 T 2 T 3 T 4 T 5 read(X) read(Y) read(Z) read(V) read(W) read(W) read(Y) write(Y) write(Z) read(U) read(Y) write(Y) read(Z) write(Z) read(U) write(U) T3T3 T4T4 T1T1 T2T2 Γράφος προτεραιότητας για το Χρονοπρόγραμμα Α
©Silberschatz, Korth and Sudarshan30 ΒΔ ΙΙ: Διαχείριση συναλλαγών Έλεγχος για σειριοποιησιμότητα βάσει συγκρούσεων Ένα χρονοπρόγραμμα είναι σειριοποιήσιμο βάσει συγκρούσεων αν και μόνο αν ο αντίστοιχος γράφος προτεραιότητας είναι ακυκλικός. Υπάρχουν αλγόριθμοι εντοπισμού κύκλων που απαιτούν χρόνο τάξης n 2, όπου n είναι ο αριθμός των κορυφών του γράφου. (Καλύτεροι αλγόριθμοι απαιτούν χρόνο τάξης n + e όπου e είναι ο αριθμός των ακμών.) Εάν ο γράφος προτεραιότητας είναι ακυκλικός, η σειρά σειριοποιησιμότητας μπορεί να βρεθεί με μια τοπολογική ταξινόμηση (topological sort) του γράφου. Για παράδειγμα μια σειρά σειριοποιησιμότητας για το χρονοπρόγραμμα Α θα ήταν: T 5 T 1 T 3 T 2 T 4.
©Silberschatz, Korth and Sudarshan31 ΒΔ ΙΙ: Διαχείριση συναλλαγών Παράδειγμα τοπολογικής ταξινόμησης γράφου Ο διπλανός γράφος προτεραιότητας είναι ακυκλικός και έχει δύο εναλλακτικές μορφές τοπολογικής ταξινόμησης Άλλο παράδειγμα?
©Silberschatz, Korth and Sudarshan32 ΒΔ ΙΙ: Διαχείριση συναλλαγών Έλεγχος για σειριοποιησιμότητα βάσει όψεων Ο έλεγχος του γράφου προτεραιότητας για σειριοποιησιμότητα βάσει συγκρούσεων πρέπει να τροποποιηθεί για να εφαρμοστεί στην περίπτωση ελέγχου για σειριοποιησιμότητα βάσει όψεων. Το πρόβλημα ελέγχου εάν ένα χρονοπρόγραμμα είναι σειριοποιήσιμο βάσει όψεων ανήκει στην κλάση των NP- complete προβλημάτων. Συνεπώς, είναι απίθανο να υπάρχει αποδοτικός (δηλ. πολυωνυμικού χρόνου) αλγόριθμος. Παρ’ όλα αυτά, μπορούν να χρησιμοποιηθούν πρακτικοί αλγόριθμοι που απλώς ελέγχουν κάποιες επαρκείς συνθήκες για σειριοποιησιμότητα βάσει όψεων.
©Silberschatz, Korth and Sudarshan33 ΒΔ ΙΙ: Διαχείριση συναλλαγών Έλεγχοι ταυτοχρονισμού έναντι ελέγχων σειριοποιησιμότητας Ο έλεγχος ενός χρονοπρογράμματος για σειριοποιησιμότητα αφού έχει εκτελεστεί δεν έχει νόημα! Στόχος: η ανάπτυξη πρωτοκόλλων ελέγχου ταυτοχρονισμού που θα εγγυώνται τη σειριοποιησιμότητα. Δε θα εξετάζουν το γράφο προτεραιότητας, αλλά θα επιβάλλουν ένα είδος πειθαρχίας για την αποφυγή μη σειριοποιήσιμων χρονοπρογραμμάτων. (Θα μελετήσουμε τέτοια πρωτόκολλα στο κεφάλαιο «Έλεγχος ταυτοχρονισμού») Οι έλεγχοι για σειριοποιησιμότητα βοηθούν στην κατανόηση γιατί ένα πρωτόκολλο ελέγχου ταυτοχρονισμού είναι σωστό.