Πλειάδες φαντάσματα (phantoms) Τα phantoms είναι πλειάδες που θα έπρεπε να έχουν φραγή αλλά δεν έχουν, γιατί δεν υπήρχαν όταν αποκτήθηκε το lock Παράδειγμα: σχέση R (E#, name, ) constraint: E# is key χρήση κλειδώματος στις πλειάδες R E# Name. o1 55 Smith o2 75 Jones 132
Πλειάδες φαντάσματα (phantoms) T1: Insert <95,White, > into R T2: Insert <95,Black, > into R Για την εισαγωγή κάθε μιας από τις παραπάνω δεν υπάρχει lock στις πλειάδες και ο περιορισμός στο κλειδί δεν παραβιάζεται αν οι Τ1 και Τ2 γίνονται παράλληλα. Λύση: Για να αποφύγουμε την εμφάνιση πλειάδωνφαντασμάτων, πρέπει να θεωρήσουμε την εισαγωγή/διαγραφή μιας πλειάδας σαν πράξη εγγραφής επί της σχέσης (δηλαδή να λάβουμε αποκλειστικό φραγμό στην σχέση συνολικά και όχι μεμονωμένα στις πλειάδες). 133
Δενδρικό Πρωτόκολλο (Tree Protocol) Δενδρικά δεδομένα που όμως οι κόμβοι δεν έχουν ιεραρχική δομή βασισμένη στον αποκλεισμό. Ξένα μεταξύ τους κομμάτια που συνδέονται μέσω του μητρικού κόμβου π.χ. B-tree Διαφορετικές δυνατότητες για πολιτικές φραγμών 2PL δεν είναι καθόλου ευέλικτο σε αυτές τις περιπτώσεις: θέτει φραγμούς στο ριζικό κόμβο. Αν χρησιμοποιήσουμε ένα συνηθισμένο σύνολο φραγμών (S, X, U κλπ) σε επίπεδο κόμβου, η σύγχρονη χρήση του B- tree είναι σχεδόν αδύνατη: κάθε δοσοληψία ξεκινά από την ρίζα του δέντρου και κλειδώνονται όλοι οι κόμβοι στην διαδρομή (μαζί με την ρίζα). 134
Δενδρικό Πρωτόκολλο (Tree Protocol) Επιπλέον προβλήματα με το 2PL εισαγωγές/διαγραφές μπορεί να δημιουργήσουν επανεγγραφές στον ριζικό κόμβο. Exclusive ή update locks πρέπει να χρησιμοποιηθούν στην ρίζα οι πράξεις μόνο ανάγνωσης μπορούν να εκτελεστούν παράλληλα Αν άρουμε τον φραγμό στην ρίζα νωρίτερα, τότε θα είχαμε περισσότερες δυνατότητες αλλά θα παραβίαζε το 2PL και την σειριομορφία Χρειαζόμαστε εξειδικευμένα πρωτόκολλα που μπορεί να παραβιάζουν το 2PL. Πρέπει να εκμεταλλευτούμε την σειρά προσπέλασης στους κόμβους για να διασφαλίσουμε σειριομορφία. 135
Κανόνες προσπέλασης δενδροειδώς δομημένων δεδομένων Το Δενδρικό πρωτόκολλο (Tree Protocol) Υποθέσεις: έχουμε μόνο ένα είδους φραγμού, οι δοσοληψίες είναι συνεπείς, τα χρονοπρογράμματα είναι legal Κανόνες: 1. Ο πρώτος φραγμός κάθε δοσοληψίας μπορεί να αφορά οποιοδήποτε κόμβο του δέντρου. 2. Επόμενοι φραγμοί μπορούν να αποκτηθούν μόνο αν η δοσοληψία κατέχει εκείνη την στιγμή έναν φραγμό επί του μητρικού κόμβου. 3. Φραγμοί επί των κόμβων μπορούν να αρθούν οποιαδήποτε στιγμή. 4. Αν μια δοσοληψία άρει έναν φραγμό επί ενός κόμβου, δεν μπορεί να θέσει εκ νέου φραγμό σε αυτόν, ακόμα και αν εξακολουθεί να κατέχει φραγμό επί του μητρικού κόμβου. 136
Δενδρικό Πρωτόκολλο (Tree Protocol) Παράδειγμα 137
Λειτουργεί σωστά το δενδρικό πρωτόκολλο? Ορίζει εμμέσως μια σειριακή διάταξη εκτέλεσης των δοσοληψιών: αν στο χρονοδιάγραμμα S, οι Ti και Tj φράζουν ένα κόμβο από κοινού και η Ti τον φράζει πρώτη, τότε η Ti προηγείται της Tj Μπορούμε να φτιάξουμε ένα γράφο προήγησης για την αναπαράσταση αυτών σχέσεων προήγησης στο χρονοπρόγραμμα Αν δεν έχει κύκλους ο γράφος, τότε κάθε τοπολογική διάταξη δοσοληψιών αποτελεί ισοδύναμο σειριακό χρονοδιάγραμμα Ισχυρισμός: χρονοδιαγράμματα που ακολουθούν το δενδρικό πρωτόκολλο πάντα παράγουν γράφους χωρίς κύκλους αν δύο δοσοληψίες φράσσουν πολλά στοιχεία από κοινού, τότε όλα φράσσονται με την ίδια σειρά αν η Ti φράσσει την ρίζα πριν την Tj, τότε η Ti φράσσει κάθε κόμβο που είναι κοινός μεταξύ των Ti και Tj πριν την Tj. 138
Εξασφάλιση σειριομορφίας (Ensuring Serializability) Μπορούμε να αποδείξουμε ότι, για κάθε χρονοδιάγραμμα S που ακολουθεί το δενδρικό πρωτόκολλο, υπάρχει κάποια σειριακή διάταξη ισοδύναμη με το S Σχεδιάγραμμα της απόδειξης: (με επαγωγή στον αριθμό των κόμβων) Base case: 1 node (root); follows by the previous observations Induction hypothesis: there is a serial order for all the transactions that lock nodes in any subtree containing more than one node Induction: Must merge the serial orders of the subtrees. Consider for each subtree the set of transactions that lock one or more nodes in the subtree. These sets have as common elements the transactions that lock the root. These transactions lock every common node in the same order they lock the root. Build a serial order for the entire set by starting with the transactions that lock the root in the appropriate order. The rest only need to be placed consistently with the serial order of their subtrees. 139
Εξασφάλιση σειριομορφίας (Ensuring Serializability) Παράδειγμα: Έστω ότι έχουμε 10 δοσοληψίες, T 1, T 2,, T 10 από τις οποίες οι T 1, T 3, T 4, T 6 κλειδώνουν την ρίζα, με αυτή την σειρά. Υποθέτουμε επίσης ότι ο ριζικός κόμβος έχει δύο θυγατρικούς κόμβους: ο πρώτος κόμβος έχει κλειδωθεί από τις δοσοληψίες με περιττό αριθμό και την T 4, ενώ ο δεύτερος από τις δοσοληψίες με άρτιο αριθμό και την T 3. Σειριακή διάταξη στο 1 ο υποδέντρο: T 9, T 1, T 5, T 7, T 3,T 4 Σειριακή διάταξη στο 2 ο υποδέντρο : T 8, T 3, T 10, T 4, T 2, T 6 T 5 T 2 T 9 T 1 T 7 T 4 T 6 T 8 T 10 T 3 Μια από την πολλές τοπολογικές ταξινομήσεις είναι: T 9, T 8, T 1, T 5, T 7, T 3,T 10,T 4, T 2, T 6 140
Δενδρικό Πρωτόκολλο (Tree Protocol) Άσκηση: Θεωρείστε τις ακόλουθες δοσοληψίες που ενεργούν στο διπλανό δέντρο T1: r1(a); r1(b); r1(e) T2: r2(a); r2(c); r2(b) T3: r3(b); r3(e); r3(f) Αν τα χρονοδιαγράμματα ακολουθούν το δενδρικό πρωτόκολλο, πόσα προγράμματα σύγχρονης εκτέλεσης (συμπλεγμένα) υπάρχουν : a) T1 και T2 b) T1 και T3 c) T1, T2 και T3 141
Έλεγχος συγχρονικότητας με χρονοσήμανση (Timestamp-based Concurrency Control) Βασικές ιδέες: Σε κάθε δοσοληψία βάζουμε μια «χρονοσήμανση» (timestamp) Καταγράφονται τα χρονόσημα των δοσοληψιών που έγραψαν ή διάβασαν τελευταίες ένα στοιχείο της ΒΔ Συγκρίνουμε αυτές τις τιμές με τα χρονόσημα των δοσοληψιών για να διασφαλίσουμε ότι το σειριακό χρονοδιάγραμμα με βάση τα χρονόσημα είναι ισοδύναμο με το πραγματικό χρονοδιάγραμμα των δοσοληψιών Αισιόδοξη (optimistic) προσέγγιση: υποθέτει ότι δεν θα προκύψει μησειριόμορφη συμπεριφορά και τα προβλήματα επιδιορθώνονται αν υπάρξει κάποια παραβίαση η μόνη θεραπεία είναι η ακύρωση και επανεκκίνηση Οι μέθοδοι κλειδώματος είναι απαισιόδοξες (pessimistic) και αποτρεπτικές (preventive). Οι διεργασίες καθυστερούν αλλά δεν ακυρώνονται. Γενικά, ο αισιόδοξος χρονοπρογραμματισμός είναι καλύτερος από τις φραγές όταν υπάρχουν πολλές δοσοληψίες που κάνουν μόνο ανάγνωση. 142
Χρονόσημα (Timestamps) Σε κάθε δοσοληψία T αποδίδεται ένα μοναδικό χρονόσημο (unique timestamp) TS(T) Τα χρονόσημα αποδίδονται με αύξουσα σειρά όταν οι δοσοληψίες αρχίζουν Τα χρονόσημα μπορούν να παράγονται με δύο διαφορετικούς τρόπους: χρησιμοποιώντας το ρολόι του συστήματος χρησιμοποιώντας έναν μετρητή που τηρεί ο χρονοδιαγραμματιστής (scheduler), ο οποίος αυξάνεται κατά 1 κάθε φορά που ξεκινά μια δοσοληψία O scheduler πρέπει να τηρεί έναν πίνακα με τις ενεργές δοσοληψίες την τρέχουσα χρονική στιγμή και τα αντίστοιχα χρονόσημά τους. 143
Χρονόσημα (Timestamps) Για να χρησιμοποιήσουμε χρονόσημα ως μέθοδο έλεγχου συγχρονικότητας, πρέπει να συσχετίσουμε κάθε στοιχείο της ΒΔ με δύο χρονόσημα και ένα επιπλέον bit: RT(X): χρόνος ανάγνωσης του X, το μεγαλύτερο από τα χρονόσημα των δοσοληψιών που έχουν διαβάσει το Χ WT(X): χρόνος εγγραφής του X, το μεγαλύτερο από τα χρονόσημα των δοσοληψιών που έχουν γράψει το Χ C(X): bit οριστικοποίησης για το X, είναι 1 αν και μόνο αν η πιο πρόσφατη δοσοληψία που έγραψε το Χ έχει ήδη οριστικοποιηθεί Το bit αυτό χρησιμοποιείται για την αποφυγή της κατάστασης όπου μια δοσοληψία Τ διαβάζει δεδομένα τα οποία γράφει μια άλλη δοσοληψία U και αργότερα η U ακυρώνεται (dirty read on uncommitted data) 144
Προβλήματα με τα χρονόσημα Ο scheduler υποθέτει ότι η σειρά χρονοσήμανσης των δοσοληψιών είναι επίσης η σειριακή διάταξη με την οποία πρέπει να φαίνεται πως εκτελούνται Ο scheduler πρέπει να ελέγχει ότι κάθε φορά που γίνεται μια ανάγνωση ή εγγραφή, αυτό που συμβαίνει στον πραγματικό χρόνο θα μπορούσε να είχε συμβεί αν κάθε δοσοληψία είχε εκτελεστεί στιγμιαία την χρονική στιγμή του χρονόσημού της. Σε αντίθετη περίπτωση μπορεί να προκύψουν δύο ειδών προβλήματα: Καθυστερημένη ανάγνωση: Η T προσπαθεί να διαβάσει το X, αλλά ο χρόνος εγγραφής WT(X) φανερώνει ότι η τρέχουσα τιμή του Χ εγγράφηκε μετά την θεωρητική εκτέλεση της T, δηλαδή TS(T) < WT(X). Η T δεν πρέπει να διαβάσει το X και ο scheduler πρέπει να ακυρώσει την T. Καθυστερημένη εγγραφή: Η T προσπαθεί να γράψει το X, αλλά ο χρόνος διαβάσματος RT(X) φανερώνει ότι κάποια άλλη δοσοληψία έπρεπε να είχε διαβάσει την τιμή που γράφτηκε από την T αλλά αντί αυτής διάβασε κάποια άλλη τιμή, δηλαδή WT(X) < TS(T) < RT(X) 145
Προβλήματα με τα χρονόσημα Καθυστερημένη ανάγνωση T2 γράφει το Χ Τ1 διαβάζει το Χ έναρξη της Τ1 έναρξη της T2 Καθυστερημένη εγγραφή T2 διαβάζει το Χ Τ1 γράφει το Χ έναρξη της Τ1 έναρξη της T2 146
Περισσότερα προβλήματα Η T1 διαβάζει το X το οποίο γράφτηκε τελευταία από την T2 και TS(T2) < TS(T1). Τι θα γίνει αν μετά την ανάγνωση του Χ από την Τ1, η T2 ακυρωθεί; είναι καλύτερο να καθυστερήσουμε την ανάγνωση από την Τ1 μέχρι η T2 να οριστικοποιηθεί ή να ακυρωθεί μπορούμε να ελέγξουμε το C(X) για να δούμε αν η T2 έχει οριστικοποιηθεί TS(T1) < TS(T2) και η T2 γράφει πρώτη το X. Όταν η T1 προσπαθήσει να γράψει, δεν κάνουμε τίποτα Κανόνας εγγραφής του Thomas: οι εγγραφές μπορούν να παραλειφθούν όταν έχει πραγματοποιηθεί ήδη μια εγγραφή με μεταγενέστερο χρόνο εγγραφής Πολιτική: όταν η T εγγράφει ένα στοιχείο X, η εγγραφή είναι δοκιμαστική (tentative write) και μπορεί να αναιρεθεί αν η Τ ματαιωθεί. Το C(X) γίνεται 0 και ο scheduler δημιουργεί ένα αντίγραφο της παλιάς τιμής του X και του προηγούμενου χρόνου εγγραφής WT(X) 147
Περισσότερα προβλήματα Dirty read T2 γράφει το Χ Τ1 διαβάζει το Χ έναρξη της T2 έναρξη της Τ1 η T2 ακυρώνεται T2 γράφει το Χ Τ1 γράφει το Χ έναρξη της Τ1 έναρξη της T2 T1 commits T2 aborts 148
Κανόνες χρονοπρογραμματισμού με χρονόσημα 1. Αν ο scheduler λάβει ένα αίτημα από την δοσοληψία T για να διαβάσει το X τότε: a. If TS(T) >= WT(X) then i. If C(X)=1, grant the request. If TS(T) > RT(X), set RT(X):=TS(T); otherwise do not change RT(X) ii. If C(X)=0, delay T until C(X) becomes 1 or the transaction that wrote X aborts b. If TS(T) < WT(X) then abort T and restart it with a new, higher timestamp 149
Κανόνες χρονοπρογραμματισμού με χρονόσημα 2. Αν ο scheduler λάβει ένα αίτημα από την δοσοληψία T για να γράψει το X τότε: a. If TS(T) >= RT(X) and TS(T) >= WT(X) then i. Write the new value for X ii. Set WT(X):=TS(T) iii. Set C(X):=0 b. If TS(T) >= RT(X) but TS(T) < WT(X) then there is already a later value for X. i. If C(X)=1, ignore the write by T ii. If C(X)=0, delay T 150
Κανόνες χρονοπρογραμματισμού με χρονόσημα 3. Αν ο scheduler λάβει ένα αίτημα οριστικοποίησης της Τ, τότε πρέπει να βρεθούν όλα τα στοιχεία της ΒΔ που γράφτηκαν από την T και το commit bit C(X) να τεθεί σε 1 4. Αν ο scheduler λάβει ένα αίτημα ματαίωσης της Τ ή αποφασίζει να ανακαλέσει (roll back) την Τ, τότε κάθε δοσοληψία που περίμενε κάποιο στοιχείο X που ενέγραψε η T πρέπει να επαναλάβει την απόπειρά της να διαβάσει ή να γράψει. 151
Πολυεκδοχικά χρονόσημα Υπάρχουν παραλλαγές της χρονοσήμανσης που χρησιμοποιούν παλιές εκδοχές των στοιχείων της ΒΔ εκτός από την τρέχουσα έκδοση. Η μέθοδος είναι χρήσιμη αν τα στοιχεία της ΒΔ είναι disk blocks ή pages. χρονόσημα έναρξης των δοσοληψιών TS(T x ) Αν ήταν διαθέσιμη η παλιά τιμή του Α, θα μπορούσε να επιτραπεί στην Τ3 να τη διαβάσει και να μην ματαιωθεί. T 1 T 2 T 3 T 4 A 150 200 175 225 r 1 (A) RT(A)=150 w 1 (A) WT(A)=150 r 2 (A) RT(A)=200 w 2 (A) WT(A)=200 r 3 (A) abort r 4 (A) RT(A)=225 152
Χρονόσημα έναντι Φραγής (Timestamp-based Scheduling vs Locking) Η χρονοσήμανση υπερέχει της φραγής όταν οι περισσότερες δοσοληψίες κάνουν μόνο ανάγνωση ή σπάνια υπάρχουν συγχρονικές δοσοληψίες που προσπαθούν να διαβάσουν και να γράψουν το ίδιο στοιχείο. Σε καταστάσεις που συμβαίνουν πολλές συγκρούσεις, η φραγή έχει καλύτερες επιδόσεις: Η φραγή συχνά καθυστερεί τις δοσοληψίες καθώς περιμένουν για κάποιο lock. Ακόμα και αν έχουμε deadlock, κάποια από τις δοσοληψίες θα ανακληθεί (rolled back). Αλλά αν τα rollbacks είναι συχνά, εισάγεται ακόμα μεγαλύτερη καθυστέρηση. Πολλά εμπορικά συστήματα ακολουθούν συμβιβαστικές λύσεις: Οι δοσοληψίες χωρίζονται σε read-only και read/write Οι read/write εκτελούνται με 2PL ενώ οι read-only εκτελούνται με χρονοσήμανση (με πολυεκδοχικά χρονόσημα). 153
Έλεγχος συγχρονικότητας με επικύρωση (Validation-based Concurrency Control ) Μια άλλη αισιόδοξη στρατηγική ελέγχου συγχρονικότητας: Οι δοσοληψίες επιτρέπεται να έχουν πρόσβαση στα δεδομένα χωρίς κλειδώματα Ελέγχουμε αν οι δοσοληψίες συμπεριφέρθηκαν σειριόμορφα Ακριβώς πριν ξεκινήσει η δοσοληψία να εγγράφει τιμές σε στοιχεία της ΒΔ, περνά από μια φάση επικύρωσης όπου τα σύνολα των στοιχείων που διάβασε και πρόκειται να εγγράψει συγκρίνονται με τα σύνολα εγγραφής των άλλων ενεργών δοσοληψιών. Αν υπάρχει κίνδυνος φυσικώς μη πραγματοποιήσιμης συμπεριφοράς, η δοσοληψία ανακαλείται (roll back). Οι δοσοληψίες εκτελούνται σε 3 φάσεις Read Validate Write 154
Έλεγχος συγχρονικότητας με επικύρωση (Validation-based Concurrency Control ) Κάθε δοσοληψία που επικυρώνεται επιτυχώς είναι σαν να εκτελείται την στιγμή της επικύρωσής της. Ένας scheduler επικυρωτικού τύπου διαθέτει μια υποθετική σειριακή διάταξη των δοσοληψιών με βάση τους χρόνους επικύρωσης, για να αποφασίσει αν η συμπεριφορά των δοσοληψιών είναι συνεπείς με αυτή την διάταξη. Ο scheduler τηρεί τρία σύνολα: START: το σύνολο των δοσοληψιών που έχουν ξεκινήσει αλλά δεν έχουν ακόμα ολοκληρώσει την επικύρωση. START(T): ο χρόνος που ξεκίνησε η T VAL: το σύνολο των δοσοληψιών που έχουν επικυρωθεί αλλά δεν έχουν τελειώσει ακόμα την φάση εγγραφής. VAL(T): ο χρόνος που η T επικυρώθηκε FIN: το σύνολο των δοσοληψιών που έχουν ολοκληρώσει την φάση 3. FIN(T): ο χρόνος που τελείωσε η T 155
Κανόνες της Επικύρωσης RS(T): το σύνολο των στοιχείων της ΒΔ που διαβάζει η T WS(T): το σύνολο των στοιχείων της ΒΔ που γράφει η T Όταν η Τ επιχειρεί να επικυρώσει: 1. Σύγκρινε το RS(T) με WS(U) για κάθε U έτσι ώστε FIN(U) > START(T) και έλεγξε αν RS(T) WS(U) = 2. Σύγκρινε το WS(T) με WS(U) για κάθε U έτσι ώστε FIN(U) > VAL(T) και έλεγξε αν WS(T) WS(U) = 156
Προβλήματα με την επικύρωση Πρόβλημα όταν RS(T) WS(U) T διαβάζει το Χ U γράφει το Χ Ενδέχεται η Τ και U να μην είναι συνεπείς με την υποθετική διάταξη (διακεκομμένες γραμμές) Η Τ πρέπει να ανακληθεί και στις δύο περιπτώσεις Πρόβλημα όταν WS(T) WS(U) έναρξη της U έναρξη της T επικύρωση της U T γράφει το Χ επικύρωση της T U γράφει το Χ επικύρωση της U επικύρωση της T λήξη της U 157
Σύγκριση των μηχανισμών ελέγχου συγχρονικότητας Χρησιμοποίηση αποθηκευτικού χώρου: Φραγή: ο χώρος στον πίνακα φραγμών είναι ανάλογος του πλήθους των φραγμένων στοιχείων της ΒΔ Χρονόσημα: Σε μια απλοϊκή υλοποίηση: απαιτείται χώρος για τους χρόνους ανάγνωσης και εγγραφής κάθε στοιχείου της ΒΔ Όλα τα χρονόσημα που είναι προγενέστερα της παλαιότερης ενεργής δοσοληψίας δεν χρειάζονται. Αποθηκεύουμε μόνο τους χρόνους των στοιχείων που προσπελάστηκαν «πρόσφατα». Επικύρωση: χώρος για τα χρονόσημα και για τα σύνολα ανάγνωσης/εγγραφής κάθε ενεργής δοσοληψίας Τα Timestamping και Validation μπορεί να χρησιμοποιούν ελαφρώς περισσότερο χώρο από το Locking. 158
Σύγκριση των μηχανισμών ελέγχου συγχρονικότητας Χρόνοι καθυστέρησης: εξαρτάται από το βαθμό αλληλεπίδρασης δηλαδή την πιθανότητα μια δοσοληψία να προσπελάσει ένα στοιχείο που προσπελάζεται συγχρόνως από μια άλλη Η φραγή καθυστερεί τις δοσοληψίες αλλά αποφεύγει τις ανακλήσεις (rollbacks) εκτός από περιπτώσεις deadlock - ακόμα και όταν η αλληλεπίδραση είναι υψηλή. Τα χρονόσημα και η επικύρωση δεν καθυστερούν τις δοσοληψίες αλλά μπορούν να προκαλέσουν την ανάκλησή τους, η οποία περιλαμβάνει περισσότερες καθυστερήσεις και σπατάλη πόρων. Αν η αλληλεπίδραση είναι χαμηλή, τότε τα χρονόσημα και η επικύρωση δεν θα προκαλέσουν πολλές ανακλήσεις και μπορεί να είναι προτιμότερα από την φραγή. Όταν είναι απαραίτητη μια ανάκληση, τα χρονόσημα εντοπίζουν νωρίτερα τα προβλήματα από την επικύρωση (η οποία αφήνει πάντοτε μια δοσοληψία να κάνει όλη την δουλεία πριν εξετάσει αν θα πρέπει να ανακληθεί). 159
View Serializability Conflict serializability guarantees serializability independently of what transactions actually do But. it is a quite strong condition on schedules of concurrent execution A weaker notion that still guarantees serializability is view serializability The main difference between conflict and view serializability appears in situations where a transaction writes a value that no other transaction reads (but possibly writes later) under view serializability such a write action can be repositioned in the schedule (might be prohibited under conflict serializability) 160
Definitions Let S 1 and S 2 be two schedules involving the same set of transactions; let T I be a hypothetical transaction that writes initial values for each DB element read by any transaction in the schedule; let T F be a hypothetical transaction that reads every element written by the transactions after the schedule ends for every R i (A), we can find the W j (A) that most closely precedes it; transaction T j is called the source of the read action S 1 and S 2 are called view equivalent if for every read action in S 1 its source is the same in S 2, and vice versa. A schedule that is view equivalent to a serial schedule is called view serializable 161
Example Consider the following schedule S: T 1 : R 1 (A) W 1 (B) T 2 : R 2 (B) W 2 (A) W 2 (B) T 3 : R 3 (A) W 3 (B) only the value of B written by T 3 is read by T F S is not conflict serializable sources for read actions: o source of R 2 (B) is T I o source of R 1 (A) and R 3 (A) is T 2 o source of R F (A) is T 2 o source of R F (B) is T 3 S is view serializable; equivalent serial schedule: (T 2, T 1, T 3 ) 162
Testing View Serializability Polygraphs: a generalization of precedence graphs a node for each transaction and additional nodes for the two hypothetical transactions an arc from Tj to T i for each action R i (X) with source Tj if Tj is the source of R i (X) and T k is another transaction that writes X, T k must appear either before Tj or after T i. This is denoted by two arcs in the graph (can choose one of the two). Special cases: if Tj is TI, then the arc from T i to T k is introduced if T i is TF, then the arc from T k to Tj is introduced 163