Προχωρημένα Θέματα Βάσεων Δεδομένων 1ο Σετ Ασκήσεων ΕΡΩΤΗΜΑ 1 Ατομικότητα : Η ατομικότητα πρακτικά εξασφαλίζει ότι είτε όλες οι πράξεις μιας δοσοληψίας θα εκτελεστούν ή καμμιά από αυτές δεν θα εκτελεστεί. Αν οι διεργασίες δεν πληρούν το κριτήριο της ατομικότητας τότε μπορεί να παραβιαστούν οι κανόνες της βάσης. Ένα παράδειγμα που εξηγεί την ανάγκη της ατομικότητας είναι ένα System Crash κατά τη διάρκεια εκτέλεσης μιας δοσοληψίας. Read (A) A : = A 50 ; Write (A) ; -- CRASH Read (B) ; B : = B + 50 ; Write (B) ; Συνέπεια : Η συνέπεια εξασφαλίζει ότι ένα σύνολο κανόνων και περιορισμών που διέπουν τη βάση δεδομένων θα πληρούνται τόσο πριν όσο και μετά την εκτέλεση μιας δοσοληψίας.για παράδειγμα κατά την μεταφορά χρημάτων από ένα τραπεζικό λογαριασμό σε έναν άλλο πρέπει το άθροισμα του ποσού και στους δύο λογαριασμούς να παραμείνει σταθερό. Ένα παράδειγμα παραβίασης της συνέπειας μπορεί να θεωρηθεί ότι προκύπτει και από το παράδειγμα 1.1 που παρατέθηκε πιο πριν. Αυτό γιατί μετά την εκτέλεση της δοσοληψίας θα έχουμε ότι Α +Β = Α+Β 50.
Γενικά οποιαδήποτε παραβίαση του συνόλου κανόνων που διέπουν τη ΒΔ θεωρείται ότι παραβιάζει τη συνέπειά της. Απομόνωση: Κάθε διεργασία θεωρεί ότι είναι η μόνη η οποία τρέχει στο σύστημα. Δηλαδή, δε βλέπει τις ενδιάμεσες τιμές που ενδεχομένως γράφουν οι υπόλοιπες διεργασίες. Αυτό προστατεύει από προβλήματα που προκύπτουν όταν οι δοσοληψίες μπορούν να δουν τις ενδιάμεσες αλλαγές των δοσοληψιών που δεν έχουν ακόμα τελειώσει. (Dirty Reads).Με άλλα λόγια θα θέλαμε όλες οι δοσοληψίες να εκτελούνται όπως θα εκτελούνταν εάν έτρεχαν σειριακά. Μονιμότητα: Εξασφαλίζει ότι οι αλλαγές μιας δοσοληψίας που επιτυγχάνει θα παραμείνουν στο σύστημα (επιβιώνουν) ακόμη και αν το σύστημα αποτύχει. Έτσι, το σύστημα δε χάνει αλλαγές που επήλθαν από απιτυχημένες δοσοληψίες. Ένα παράδειγμα παραβίασης της μονιμότητας είναι να εκτελεστεί επιτυχώς μια δοσοληψία στέλνοντας το ανάλογο μήνυμα αλλά να «πέσει» το σύστημα (π.χ. λόγω διακοπής ρεύματος) πριν προλάβουν οι μεταβολές να γραφτούν στο δίσκο. ΕΡΩΤΗΜΑ 2 S1:R1(B)R5(A)W4(Γ)W2(B)R1(A)W3(A)W5(Γ) R4(B)R2(A) S2:R2(B)W2(A)R1(B)W2(Γ)R3(Γ)R1(A)R3(A)W1(B)R3(B)W3(A)R1(Γ) α) Για να αποφανθούμε για την σειριοποιησιμότητα συγκρούσεων των χρονοπρογραμμάτων θα κατασκευάσουμε τον αντίστοιχο γράφο για κάθε ένα από αυτά. Για το S1:
Παρατηρούμε ότι ο γράφος σειριοποιησιμότητας για το S1 περιλαμβάνει κύκλο. Έτσι συνάγουμε ότι το χρονοπρόγραμμα S1 δεν είναι σειριοποιήσιμο συγκρούσεων. Για το S2: Παρατηρούμε ότι ο γράφος σειριοποησιμότητας για S2 είναι ακυκλικός.μπορούμε λοιπόν να συμπεράνουμε ότι το χρονοπρόγραμμα S2 είναι σειριοποιήσιμο. Το αντίστοιχο σειριακό χρονοπρόγραμμα προκύπτει άμεσα από την τοπολογική ταξινόμηση του παραπάνω γράφου Τ2->Τ1- >Τ3. Με βάση αυτή την τοπολογική ταξινόμηση συμπεραίνουμε ότι το αντίστοιχο σειριακό χρονοπρόγραμμα θα είναι το: Τ2,Τ1,Τ3. Δηλαδή το: S2 :R2(B)W2(A)W2(Γ)R1(B)R1(A)W1(B)R1(Γ)R3(Γ)R3(A)R3(B)W3(B) β) Το S1 δεν είναι σειριοποιήσιμο συγκρούσεων. Κατά συνέπεια δεν μπορεί να έχει προκύψει από τον αλγόριθμο 2PL. Το S2 έχει ακυκλικό γράφο.οπότε είναι πιθανόν να έχει προκύψει από 2PL.Εισάγοντας κατάλληλα κλειδώματα παρατηρούμε ότι υπάρχει τρόπος να προκύψει από το παραπάνω χρονοπρόγραμμα από 2PL.Αυτό με την προυπόθεση ότι είναι εφικτή η αναβάθμιση του κλειδώματος. S2(B)R2(B)X2(A)W2(A)S1(B)R1(B)X2(Γ)W2(Γ)U2(Α,Β,Γ)S3(Γ)R3(G)S1 (A)X1(B)*S1(Γ)Ρ1(Α)S3(A)R3(A)W1(B)U1(A,B),S3(B)R3(B)X3(A)*W3( A)U3(Α,Β,Γ)R1(Γ)U1(Α,Γ) *Τα εν λόγω κλειδώματα προκύπτουν από αναβάθμιση υπάρχοντος S-lock σε X-lock.
ΕΡΩΤΗΜΑ 3 00 update: T2 writes P1 10 update: T1 writes P1 20 update: T3 writes P1 30 update: T2 writes P1 40 checkpoint 50 update: T1 writes P1 60 update: T2 writes P1 70 T2 commit 80 T2 end 90 update: T3 writes P1 100 T1 abort X CRASH, RESTART Καταρχήν παρατηρώντας το log file που δίδεται από την εκφώνηση μπορούμε να εξάγουμε ότι κατά την λήψη του Checkpoint οι ενεργές δοσοληψίες ήταν οι Τ1 Τ2 και Τ3 (Υπό την προϋπόθεση ότι δεν υπάρχουν άλλες διεργασίες στο σύστημα που δεν φαίνονται στο log). 1. Φάση Ανάλυσης Κατά την φάση της ανάλυσης ο αλγόριθμος διατρέχει το log από το τελευταίο Checkpoint προς τα κάτω. Δηλαδή ξεκινάμε από το LSN=50. Στη συνέχεια θα συμβολίζουμε το Transaction Table με TT και Dirty Page Table με DPT. LSN 50: Adds (T1,50) to TT and (P1,50) to DPT LSN 60: Adds (T2, 60) to TT. Does not change P1 in DPT LSN 70: Changes status of T2 to C LSN 80: Removes T2 entries from TT
LSN 90: Adds (T3,90) to TT. Does not change P1 in DPT LSN 100: Edit T1 Entry in TT to (T1, 100) Άρα στο τέλος της διαδικασίας της ανάλυσης θα έχουμε τα εξής Transaction Table Entries (losers): (T1, 100), (T3, 90) Dirty Page Table Entries: (P1, 50) Committed Transaction (winners): T2 Loser Set = (100, 90) 2. Φάση UNDO Κατά το UNDO θα αναιρέσουμε όλες τις δοσοληψίες που ανήκουν στο σύνολο των losers ξεκινώντας από το τέλος του log και κατευθυνόμενοι προς την αρχή του. Συγκεκριμένα θα ξεκινήσουμε από την υψήλοτερη LSN τιμή στον ΤΤ. Άρα: LSN 100: Removes LSN from Loser Set. Adds prevlsn. Looser Set=(90,50) LSN 90: Removes LSN 90 from loser Set. Undoes the change made from T3 to P1. Adds 20 to Looser Set = (50,20) LSN 50 Removes LSN 50 from loser Set. Undoes change made from T1 to P1. Adds 10 to LS. Looser Set = (20, 10) LSN 20: Removes LSN 20 from loser Set. Undoes change made from T3 to P1. Follow prevlsn to continue. LSN 10: Remove LSN 10 from loser Set. Undoes change made from T1 to P1. Follow prevlsn to continue. Φάση REDO Κατά το REDO διατρέχουμε το log file από το LSN=50 που είναι το μικρότερο LSN στο DPT. LSN 50: No change made
LSN 60: Redoes update done from T2 to P1 if needed LSN 70: No action LSN 80: No action LSN 90: No action LSN 100: No action