Θεµατολόγιο. Α) Πρακτικά Θέµατα στον Έλεγχο Ταυτοχρονισµού

Σχετικά έγγραφα
Έλεγχος συγχρονικότητας Μέρος 2 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Επεξεργασία οσοληψιών (συνέχεια)

Έλεγχος Ταυτοχρονισμού

Τεχνικές Ελέγχου Συνδροµικότητας

Επεξεργασία οσοληψιών

Δοσοληψίες. Κατανεμημένα Συστήματα

Δοσοληψίες. Κατανεμημένα Συστήματα

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Επεξεργασία οσοληψιών

Επεξεργασία οσοληψιών (συνέχεια)

Επεξεργασία οσοληψιών

Βάσεις Δεδομένων ΙΙ. Διάλεξη 2 η Tεχνικές Ελέγχου Συνδρομικότητας

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων: ημήτρης Πλεξουσάκης

Επαναληπτικές ασκήσεις

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης

Θεµατολόγιο. Πώς ελέγχουµε σειριοποιησιµότητα στην πράξη;

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων: ημήτρης Πλεξουσάκης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙI

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Επεξεργασία οσοληψιών

Κεφάλαιο 13 Δοσοληψίες

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙΙ. Επεξεργασία οσοληψιών. το πώς βλέπει το Σ Β τα προγράµµατα των χρηστών. οσοληψία (transaction)

ΗΥ360 Αρχεία και Βάσεις εδοµένων

Πλειάδες φαντάσματα (phantoms)

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. Πληροφοριακά Συστήματα και Βάσεις Δεδομένων. Δρ. Κωνσταντίνος Χ.

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Προχωρημένα Θέματα Βάσεων Δεδομένων

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙΙ. Σχετικά µε το µάθηµα: Αξιολόγηση. Σχετικά µε το µάθηµα:faq ΟΧΙ ΝΑΙ. Λιγότερος! (ας πούµε το 1/3-1/4)

10 η Διάλεξη Python Βάσεις δεδομένων στη python

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Τεχνικές Ανάκαµψης. Αtomicity (ατοµικότητα) - είτε όλες οι πράξεις είτε

ΕΥΧΑΡΙΣΤΙΕΣ. της εφαρµογής που υλοποιήσαµε, αλλά και προτάσεις για µελλοντικές εφαρµογές µε βάση την τεχνογνωσία που αποκτήσαµε.

Τεχνικές Ανάκαµψης. Αtomicity (ατοµικότητα) - είτε όλες οι πράξεις είτε

Επανάκτηση δεδομένων. (εμπλουτισμένο υλικό)

Βάσεις Δεδομένων ΙΙ. Διάλεξη 1 η Επεξεργασία Δοσοληψιών. Σύστημα Επεξεργασίας Δοσοληψιών

ΙΑΧΕΙΡΙΣΗ ΟΣΟΛΗΨΙΩΝ Να θυµηθούµε:

ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης

Άσκηση 1 (15 μονάδες) (Επεκτατός Κατακερματισμός)

Έλεγχος συγχρονικότητας Μέρος 1 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

PRINCIPLES OF TRANSACTION-ORIENTED DATABASE RECOVERY. Theo Haerder Andreas Reuter. Μαρία Κουτσουλιέρη

Επεξεργασία Ερωτήσεων

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Τεχνικές Ανάνηψης Περιεχόµενα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κατανεμημένα Συστήματα με Java. Ενότητα # 7: Ατομικές συναλλαγές Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

PostgreSQL. Oracle. Εαρινό Εξάμηνο

Βάσεις Δεδομένων ΙΙ. Διάλεξη 3 η Tεχνικές Aνάκαμψης. Ιδιότητες Δοσοληψιών

Δοσοληψίες Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Γιατί υϖάρχει τέτοια καθολική κατάσταση;

Φραγή σε πολλαπλά επίπεδα λεπτομέρειας Τι αντικείμενα κλειδώνουμε?

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Βάσεις Δεδομένων 2. Φροντιστήριο Δοσοληψίες Τεχνικές ελέγχου συνδρομικότητας. Ημερ: 05/5/2009 Ακ.Έτος

Προχωρημένα Θέματα Βάσεων Δεδομένων

Το εσωτερικό ενός Σ Β

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών. ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

Εργαστήριο Βάσεων Δεδομένων

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης

Επαναφορά του Συστήματος (Μέρος Α')

Υ- 07 Παράλληλα Συστήματα Transac9onal memory

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

ΚΕΦΑΛΑΙΟ 1 ΣΥΝΑΛΛΑΓΕΣ ΚΑΙ ΕΛΕΓΧΟΣ ΤΑΥΤΟΧΡΟΝΙΣΜΟΥ

Μάθημα Βάσεις Δεδομένων ΙΙ - Ασκήσεις Επανάληψης. 01 Εκφώνηση

Επεξεργασία Ερωτήσεων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

Εξεταστική Περίοδος Ιουνίου 2004

2.4 Κλασσικά Προβλήματα IPC

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Το σχεσιακό μοντέλο βάσεων δεδομένων

Βάσεις Δεδομένων ΙΙ Ενότητα 2

Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Έλεγχος Ταυτοχρονισμού

Επεξεργασία Ερωτήσεων

Ανάκτηση Δεδομένων (Information Retrieval)

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Αδιέξοδα (Deadlocks)

Επεξεργασία Ερωτήσεων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Query-by-Example (QBE)

Δυναμικά Πολυεπίπεδα Ευρετήρια (Β-δένδρα) Μ.Χατζόπουλος 1

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Βάσεις Δεδομένων (Databases)

Σημεία ελέγχου (Checkpoints)

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κατανεμημένες δοσοληψίες

ΚΕΦΑΛΑΙΟ Web Services

Heapsort Using Multiple Heaps

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

Ισοζυγισµένο έντρο (AVL Tree)

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σχεδιασμός Βάσεων Δεδομένων

Transcript:

Θεµατολόγιο Α) Πρακτικά Θέµατα στον Έλεγχο Ταυτοχρονισµού Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Β) Εναλλακτικές Τεχνικές Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις Γ) οσοληψίες και SQL Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL

Αρχική παρατήρηση Μέχρι στιγµής, κάναµε δύο µη προφανείς υποθέσεις: Η Β δεν εµπλουτίζεται µε νέες εγγραφές κατά τη διάρκεια των δοσοληψιών (ήτοι, υποθέταµε ότι write = UPDATE και όχι INSERT) Τα αντικείµενα της Β είναι ανεξάρτητα µεταξύ τους (το οποίο καταρρέει αν υποθέσουµε π.χ., ένα B+ tree σε κάποιο πεδίο ενός πίνακα) Τι θα γίνει αν αναιρέσουµε τις υποθέσεις αυτές; 3 Παράδειγµα: Sailors SID SNAME RATING Popay Popay AGE 7 43 T: SELECT RATING, MAX(AGE) FROM SAILORS GROUP BY RATING 3 Popay3 80 4 Popay4 63 T: INSERT INTO SAILORS (5, X,,96); DELETE FROM SAILORS WHERE RATING = AND AGE IN (SELECT MAX(AGE) FROM SAILORS WHERE RATING =) 4

Πιθανή Εκτέλεση SID SNAME RATING Popay AGE 7 Χ T: SELECT RATING, MAX(AGE) FROM SAILORS GROUP BY RATING Popay 43 Χ 3 Popay3 80 4 Popay4 63 RATING AGE T: INSERT INTO SAILORS (5, X,,96); DELETE FROM SAILORS WHERE RATING = AND AGE IN (SELECT MAX(AGE) FROM SAILORS WHERE RATING =) Πρώτα, οι RATING= 7 5 Πιθανή Εκτέλεση SID SNAME RATING Popay AGE 7 Χ T: SELECT RATING, MAX(AGE) FROM SAILORS GROUP BY RATING 3 4 Popay Popay3 Popay4 43 80 63 Χ RATING AGE 7 5 X 96 Χ T: INSERT INTO SAILORS (5, X,,96); DELETE FROM SAILORS WHERE RATING = AND AGE IN (SELECT MAX(AGE) FROM SAILORS WHERE RATING =) Το INS παίρνει X-lock 6

Πιθανή Εκτέλεση SID SNAME RATING Popay Popay AGE 7 43 Χ Χ T: SELECT RATING, MAX(AGE) FROM SAILORS GROUP BY RATING 3 4 Popay3 Popay4 80 63 Χ Χ RATING AGE 7 5 X 96 Χ T: INSERT INTO SAILORS (5, X,,96); DELETE FROM SAILORS WHERE RATING = AND AGE IN (SELECT MAX(AGE) FROM SAILORS WHERE RATING =) Το DEL παίρνει X-lock 7 Πιθανή Εκτέλεση SID SNAME RATING Popay Popay AGE 7 43 Χ Χ T: SELECT RATING, MAX(AGE) FROM SAILORS GROUP BY RATING 4 5 Popay4 X 63 96 RATING AGE 7 T: INSERT INTO SAILORS (5, X,,96); DELETE FROM SAILORS WHERE RATING = AND AGE IN (SELECT MAX(AGE) FROM SAILORS WHERE RATING =) Τ COMMITS!! 8

Πιθανή Εκτέλεση SID SNAME RATING Popay AGE 7 T: SELECT RATING, MAX(AGE) FROM SAILORS GROUP BY RATING Popay 43 4 5 Popay4 X 63 96 Χ RATING AGE 7 T: INSERT INTO SAILORS (5, X,,96); DELETE FROM SAILORS WHERE RATING = AND AGE IN (SELECT MAX(AGE) FROM SAILORS WHERE RATING =) Μετά, όσοι έχουν RATING= 63 9 Πιθανές Εκτελέσεις... Τ Τ RATING AGE 7 SID 3 4 5 SNAME Popay Popay Popay3 Popay4 X RATING AGE 7 43 80 63 96 Τ ; Τ RATING Τ ;Τ RATING 63 AGE 7 80 AGE 96 63 0

Φάντασµα Το φαινόµενο κατά το οποίο µια δοσοληψία ξεκινά µε ένα σύνολο εγγραφών στην αρχή της, και βρίσκεται µε ένα διαφορετικό σύνολο εγγραφών στο τέλος της, χωρίς να έχει κάνει αυτή τις αλλαγές. Ο PL ΕΝ µας προστατεύει από φαντάσµατα! Αν µπορούσαµε άραγε... SID SNAME RATING AGE Popay 7 Χ Popay 43 Χ 3 Popay3 80 4 Popay4 63 5 X 96 Χ να κλειδώναµε στην ίδια δοσοληψία όλες τις εγγραφές που πληρούν τη συνθήκη RATING=...

Κλείδωµα κατηγορήµατος Το γεγονός ότι κλειδώνω όλες τις εγγραφές που πληρούν µια συνθήκη (όπως π.χ., RATING = ) Η πιο απλοϊκή λύση, είναι να κλειδώσω όλον τον πίνακα (βλ. και στη συνέχεια) Καµιά πιο έξυπνη ιδέα; 3 Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 4

Κλείδωµα ευρετηρίων Αν είχαµε ένα index (π.χ., B+ tree) πάνω στο πεδίο rating, θα µπορούσαµε να κλειδώναµε γρήγορα όλες τις εγγραφές µε RATING=. Ακόµα κι αν δεν υπάρχουν τέτοιες εγγραφές, κλειδώνοντας τον index, µπορούµε να απαγορεύσουµε να δηµιουργηθούν από άλλους κατά τη διάρκεια της δοσοληψίας! Ειδική περίπτωση του κλειδώµατος κατηγορήµατος... Β+ tree Table 5 Πρώτη λύση Ας υποθέσουµε ότι θέλουµε να εισάγουµε µια εγγραφή µε RATING=στη διάρκεια της Τ Κατεβαίνοντας από τη ρίζα προς τα φύλλα του Β+ δέντρου, µπορούµε να κλειδώνουµε κάθε κόµβο µε X- lock [του φύλλου συµπεριλαµβανοµένου] Τραγική απόδοση: ήδη από το πρώτο βήµα έχω κλειδώσει τη ρίζα, ήτοι, ΟΛΟ το δέντρο. 6

Παρατήρηση Στα Β+ δέντρα, οι ενδιάµεσοι κόµβοι χρησιµεύουν ΜΟΝΟ ως µονοπάτια για τα φύλλα [θυµάστε τη διαφορά µε τα Β δέντρα;] Αν κλείδωνα µε S-lock τους ενδιάµεσους κόµβους και µε X-lock τα φύλλα; Bug: τι θα γίνει αν η εισαγωγή διασπάσει το παιδί ; 7 Απλός αλγόριθµος κλειδώµατος δέντρων SELECT: Ξεκινώντας από τη ρίζα κλειδώνουµε µε S-lock κάθε κόµβο. Μετά, ξεκλειδώνουµε τον γονέα του. INS/DEL: Ξεκινώντας από τη ρίζα κλειδώνουµε µε X-locks κατά περίπτωση. Μετά ελέγχουµε αν ο κλειδωθείς κόµβος είναι ασφαλής: Αν ναι, ξεκλειδώνουµε τους προγόνους του. Ασφαλής κόµβος: οι όποιες αλλαγές δεν θα διαδοθούν προς τα πάνω από τον κόµβο αυτό INS: ο κόµβος δεν είναι πλήρης. DEL: ο κόµβος δεν είναι άδειος κατά το ήµισυ. 8

Απλός αλγόριθµος κλειδώµατος δέντρων Α τρόπος για το «κατά περίπτωση» X-locks για όλους τους κόµβους Β τρόπος για το «κατά περίπτωση» S-locks για τους ενδιάµεσους κόµβους X-locks για τα φύλλα Μετατροπή του S-lock σε Χ-lock αν υπάρχει διάσπαση 9 ROOT 0 A 35 B Θυµάστε τι βάζουµε σε κάθε κουτάκι; 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E 0

ROOT Χ 0 A DEL 38* 35 B Με Α τρόπο... 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E ROOT 0 A DEL 38* 35 Χ B 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E

ROOT 0 A 35 B DEL 38* 3 F Χ 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E 3 ROOT 0 A 35 B DEL 38* 3 F 38 44 C G H I D E 0* * 3* 4* 35* 36* 38* 4* 44* Χ 4

ROOT 0 A 35 B DEL 38* 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 4* 44* E 5 ROOT S 0 A INS 45* 35 B Με Β τρόπο... 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E 6

ROOT 0 A 35 S B INS 45* 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E 7 ROOT 0 A 35 S B INS 45* Γιατί ΕΝ ξεκλειδώνω το Β ; S 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* E 8

ROOT 0 A 35 B INS 45* 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* Χ E 9 ROOT 0 A 35 B INS 45* 3 F 38 44 C 0* G H I D * 3* 4* 35* 36* 38* 4* 44* 30 E 45*

Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 3 Τι κλειδώνουµε στην πράξη; Μέχρι τώρα θεωρούσαµε εγγραφές Στην πράξη, συνήθως µιλάµε για σελίδες Μπορούµε να κλειδώσουµε τη βάση σε πολλά «επίπεδα» που ορίζουν µια «ιεραρχία διακριτότητας» Database contains Tables Pages Tuples 3

Ορισµοί ιακριτότητα (granularity): πόσο µικρό είναι ένα αντικείµενο υπό παρατήρηση Μικρή διακριτότητα = µεγάλο µέγεθος στοιχείου (π.χ., πίνακας ή Β ) Μεγάλη διακριτότητα = µικρό µέγεθος στοιχείου (π.χ., σελίδα ή εγγραφή) Πρόγονος ενός αντικειµένου: οποιοδήποτε αντικείµενο στην ιεραρχία διακριτότητας το περικλείει (π.χ., η Β είναι πρόγονος µιας σελίδας) 33 Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Κλείδωµα σε µικρή διακριτότητα: αποκλεισµός και καθυστέρηση των δοσοληψιών που τρέχουν εν παραλλήλω (π.χ., τι θα γίνει αν κλειδώσω όλη τη Β ;) Κλείδωµα σε µεγάλη διακριτότητα: µεγάλος αριθµός κλειδωµάτων (χώρος µνήµης, καθυστέρηση διαχείρισης) Ερώτηση Κρίσεως: Ποια η καλύτερη διακριτότητα (& υπό ποιες συνθήκες); 34

Παράδειγµα Τ: UPDATE EMP WHERE EMP_ID = SET T: SELECT * FROM EMP Η Τ για να γράψει µία και µόνο εγγραφή, µπλοκάρει την Τ. Ιδέα: Τ: κλειδώνει την εγγραφή της Τ Τ: ελέγχει για κλείδωµα όλες τις εγγραφές µία µία; Καλύτερη Ιδέα: Μήπως να κλειδώναµε µόνο τη σελίδα που περιέχει την εγγραφή της Τ; 35 Εκµετάλλευση της ιεραρχίας Η ιδέα είναι να κλειδώνουµε µε κατάλληλο τρόπο σε διαφορετικά επίπεδα διακριτότητας Χρειαζόµαστε ένα νέο είδος κλειδώµατος (γιατί;) Κλείδωµα πρόθεσης (intention lock): εφαρµόζεται σε ένα πρόγονο, χαρακτηρίζοντας τι πράξη (για την ακρίβεια: κλείδωµα) θα εφαρµοστεί στον απόγονό του Τριών ειδών κλειδώµατα πρόθεσης... 36

Κλειδώµατα Πρόθεσης Ένας πρόγονος (π.χ., σελίδα) λαµβάνει IS: αν η δοσοληψία θέλει να διαβάσει (πάρει S-lock) για κάποιους απoγόνους (π.χ., µια εγγραφή) IX: αν η δοσοληψία θέλει να γράψει (πάρει X-lock) για κάποιους απογόνους (π.χ., µια εγγραφή) SIX: αν η δοσοληψία θέλει να διαβάσει (πάρει S-lock) όλους τους απογόνους του και να γράψει (πάρει X-lock) και κάποιους από αυτούς. Πριν πάρεις ένα κλείδωµα για κάποιο αντικείµενο, πρέπει να πάρεις κλείδωµα πρόθεσης για όλους τους προγόνους του 37 Συγκρούσεις Ο πίνακας συγκρούσεων γίνεται πλέον: T: έχει κάποιο lock σε ένα αντικείµενο Τ: αιτείται κάποιο lock στο ίδιο αντικείµενο T T IS IX SIX IS IX SIX S X Ότι δεν έχει είναι επιτρεπτό S X 38

Παράδειγµα: «σύγκρουση» για µια σελίδα Τ: έχει κλειδώσει µε IS τη σελίδα, ώστε να διαβάσει µία (κάποιες) εγγραφή(ες) της Τ: αντιστοίχως, αλλά για να γράψει Αν πρόκειται για διαφορετικές εγγραφές, κανείς δεν περιµένει Αλλιώς, η σύγκρουση συµβαίνει στο χαµηλότερο επίπεδο µε τα κλειδώµατα S- & X- locks T T IS IX SIX S X IS IX SIX S X 39 Τα κλειδώµατα είναι σε όλη την ιεραρχία... T T T T IS IX contains Database Tables Pages Tuples IS IS IS S IX IX IX X IS IX Στα ψηλά επίπεδα, δουλεύει καλά. Στα χαµηλά, όπως πριν... 40

Αλγόριθµος Κλειδωµάτων Ξεκινάς στην κορυφή της ιεραρχίας Για να πάρω ένα κλείδωµα S- (ή IS-) σε ένα αντικείµενο, πρέπει να έχω IS- (ή IX-) στον πρόγονό του [αλλιώς, περιµένω] Για να πάρω ένα κλείδωµα X- (ή IX- ή SIX) σε ένα αντικείµενο, πρέπει να έχω IX- (ή SIX-) στον πρόγονό του [αλλιώς, περιµένω] Ξεκλειδώνω µε την αντίστροφη σειρά (bottom-up) 4 Παραδείγµατα (και «τι σηµαίνει S-lock σε ένα πίνακα;») T διαβάζει τον πίνακα R, και update κάποιες εγγραφές: T παίρνει SIX-lock στον R, µετά για κάθε εγγραφή του R παίρνει και ένα S-lock, και όπου δη, αναβαθµίζει το S-lock αυτό σε X-lock (στα updates στις κρίσιµες εγγραφές, δηλαδή). T χρησιµοποιεί ένα index για να διαβάσει τµήµα της R: T παίρνει IS στον R και µετά για κάθε εγγραφή του R παίρνει και ένα S-lock. T3 διαβάζει όλον τον R: //ΠΡΟΣΟΧΗ! T3 παίρνει S-lock στο R. //S-lock σε πίνακα; ή, η T3 κάνει ότι και η T & µπορεί να χρησιµοποιήσει «κλιµάκωση κλειδώµατος» (lock escalation) για να αποφασίσει αν θα πάρει S lock στο R. 4

Κλιµάκωση κλειδωµάτων Όταν µια δοσοληψία προσπαθήσει να πάρει κλειδώµατα π.χ., για έναν ολόκληρο πίνακα, πέφτουµε στην περίπτωση του προβλήµατος χώρου & χρόνου στη διαχείριση των κλειδωµάτων Κλιµάκωση Κλειδωµάτων: Αποφασίζουµε ότι πάνω από κάποιο threshold, αντί να κλειδώνω µία µία σελίδα (µε S- ή X-lock), κλειδώνω µόνο τον πίνακα (µε S- ή X-lock) και τίποτε άλλο. ΠΡΟΣΟΧΗ: Αδιέξοδα!!! (αν π.χ., ο ένας είχε SIX και ο άλλος IS στον πίνακα πριν την κλιµάκωση) 43 Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 44

Το ζήτηµα είναι... Όπως είπαµε, υπάρχει το πρόβληµα των φαντασµάτων Ο σκοπός είναι να το αποτρέψω και θα χρησιµοποιήσουµε την τεχνική κλειδώµατος κατηγορήµατος (predicate locking) Θα εξετάσουµε µε ποιον τρόπο, γίνεται αυτό στην πράξη! 45 Φαντάσµατα SID SNAME RATING AGE Popay 7 Χ Popay 43 Χ 3 Popay3 80 4 Popay4 63 5 X 96 Χ να κλειδώναµε στην ίδια δοσοληψία όλες τις εγγραφές που πληρούν τη συνθήκη RATING=... 46

Κλείδωµα κατηγορήµατος / ευρετηρίων Το γεγονός ότι κλειδώνω όλες τις εγγραφές που πληρούν µια συνθήκη (όπως π.χ., RATING = ) Αν είχαµε ένα index (π.χ., B+ tree) πάνω στο πεδίο rating, θα µπορούσαµε να κλειδώναµε γρήγορα όλες τις εγγραφές µε RATING=. Β+ tree Table 47 Αν ΕΝ έχω κάποιον index Για να αποφύγω φαντάσµατα SELECT statements: S-lock σε όλον τον πίνακα UPDATE / DELETE statements: SIX-lock στον πίνακα και Χ-locks στις κρίσιµες σελίδες µε τις υπό τροποποίηση εγγραφές Αν κάποιος πάει να γράψει (X-lock στη σελίδα), θα συγκρουστεί µε το εν λόγω κλείδωµα 48

Αν έχω B+ trees Στον index, S-locks στα φύλλα όταν κάνω SELECT, αλλιώς X-locks στα φύλλα Στον πίνακα: SELECT statements: IS-lock στον πίνακα, S-locks στις σελίδες µε εγγραφές που ικανοποιούν τοwhere clause UPDATE / DELETE statements: IX-lock στον πίνακα και Χ-locks στις κρίσιµες σελίδες µε τις υπό τροποποίηση εγγραφές Πρώτα κλειδώνω τον index και µετά τον πίνακα Η σύγκρουση εντοπίζεται στον index 49 Tuning for performance Γράψτε µικρές δοσοληψίες. Εν ανάγκη, σπάστε τις µεγάλες σε πολλές µικρές δοσοληψίες [το default στην SQL είναι δοσοληψία ανά εντολή]! Χρησιµοποιήστε indexes. Όχι µόνο ψάχνουµε πιο γρήγορα [αν και γράφουµε πιο αργά] αλλά ο ταυτοχρονισµός αυξάνεται! Αποφύγετε το lock escalation. Τα νέα DBMS s συνήθως δεν το κάνουν, εκτός κι αν τους το πείτε (RTFM) Το granule (επίπεδο διακριτότητας ;) ήταν για καιρό η σελίδα. Σιγά σιγά, κατεβαίνουµε σε επίπεδο εγγραφής (π.χ., Oracle 9i) 50

Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 5 Προβλήµατα των κλειδωµάτων Οι τεχνικές κλειδώµατος είναι συντηρητικές (αποφεύγονται οι συγκρούσεις) Μειονεκτήµατα: επιβάρυνση (overhead) χειρισµού κλειδώµατος έλεγχος προς ανίχνευση αδιεξόδων 5

Αισιόδοξη εκτέλεση δοσοληψιών Κάθε δοσοληψία έχει τρεις φάσεις ΑΝΑΓΝΩΣΗ: η δοσοληψία διαβάζει από τη Β, αλλά τροποποιεί τοπικά αντίγραφα των αντικειµένων σε δικό της χώρο ΕΠΙΚΥΡΩΣΗ: έλεγχος για συγκρούσεις αν υπάρχει σύγκρουση, abort & restart ΕΓΓΡΑΦΗ: γράφει τα τοπικά αντίγραφα στη Β Ti R V W 53 Πώς δουλεύει ; Χρονόσηµο δοσοληψίας: η στιγµή που ξεκινά η φάση επικύρωσής της Έστω ότι έχουµε µια δοσοληψία Tj που θέλει να κάνει Επικύρωση Θα την ελέγξουµε σε σχέση µε όλες τις δοσοληψίες Ti µε χρονόσηµο µικρότερο της Tj. Για όλες τις δοσοληψίες Ti, τ.ω. Ti < Tj, αρκεί να ισχύει µία από τις παρακάτω συνθήκες ελέγχου Αν δεν ισχύει καµία εξ αυτών, η Tj πρέπει να κάνει ABORT και να επανεκκινηθεί. 54

η συνθήκη ελέγχου Η Ti τελειώνει πριν αρχίσει η Tj. Ti R V W Tj R V W Σειριακή εκτέλεση των δοσοληψιών η συνθήκη ελέγχου Η Τi τελειώνει πριν αρχίσει η φάση εγγραφής της Tj WriteSet(Ti) ReadSet(Tj) = Ti R V W R V W Tj Η Τj δεν διαβάζει κανένα αντικείµενο που τροποποιεί η Τi Όλες οι εγγραφές της Ti προηγούνται αυτών της Tj

3η συνθήκη ελέγχου Η Τi τελειώνει τη φάση ανάγνωσης πριν τελειώσει η φάση ανάγνωσης της Τj WriteSet(Ti) ReadSet(Tj) = WriteSet(Ti) WriteSet(Tj) = Ti R V W Tj R V W Η Τj και η Τi γράφουν αντικείµενα ταυτόχρονα, µεν,... αλλά, οι εγγραφές τους ΕΝ επικαλύπτονται! Προσέξτε ότι... ΠΕΡΙΟΡΙΣΜΟΣ: Όταν µια δοσοληψία βρίσκεται σε φάση επικύρωσης, καµιά άλλη δοσοληψία δεν µπορεί να κάνει COMMIT!!! Ελέγξτε και µόνοι σας: ο αισιόδοξος έλεγχος ταυτοχρονισµού, ουσιαστικά υλοποιεί το γράφο σειριοποιησιµότητας (πρακτικά ελέγχει αν οι συγκρούσεις γίνονται µε την ίδια σειρά) 58

Σχόλια Overhead διατήρησης λίστας προσπελασθέντων αντικειµένων Αν οι συγκρούσεις είναι σπάνιες έχουµε µεγαλύτερη απόδοση. Αν οι συγκρούσεις είναι συχνές, το overhead του abort & restart είναι µεγαλύτερο. 59 Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 60

Ορολογία Χρονόσηµο δοσοληψίας TS(T): η χρονική στιγµή που ξεκινά η δοσοληψία Τ Χρονόσηµο ανάγνωσης αντικειµένου RTS(O): η χρονική στιγµή της τελευταίας ανάγνωσης του αντικειµένου Ο (ασχέτως δοσοληψίας) Χρονόσηµο εγγραφής αντικειµένου WTS(O): η χρονική στιγµή της τελευταίας εγγραφής του αντικειµένου Ο (ασχέτως δοσοληψίας) 6 Κεντρική Ιδέα Αν η Τi ξεκινά ΠΡΙΝ την Τj, όλες οι συγκρούσεις πράξεων µεταξύ Τi και Τj, πρέπει να έχουν την πράξη της Τi (έστω αi) ΠΡΙΝ την πράξη της Τj (έστω αj) If TS(Ti) < TS(Tj), Τi action ai,aj Τj 6

Κεντρική Ιδέα Αντί να συγκρίνω δοσοληψίες, θεωρώ ότι η Ti διαβάζει/γράφει το αντικείµενο Ο Κάθε φορά, µια δοσοληψία Tj συγκρίνει το TS(Tj) µε τα χρονόσηµατων αντικειµένων If TS(Ti) < TS(Tj), Τi Τj Ο action aj XX(O) < TS(Tj) XX: WTS, ή RTS 63 Tj θέλει να κάνει read(o) Αν WTS(O) > TS(Tj) [ήτοι, η Τj ξεκίνησε πριν γραφτεί το O], abort Tj &restartµε νέο µεγαλύτερο TS. Αν WTS(O) < TS(Tj), επέτρεψε στην Τj να διαβάσει και RTS(O) := max(rts(o),ts(tj)) Τi TS(Ti) < TS(Tj) Τj Overhead! action aj Ο XX(O) < TS(Tj) 64

Tj θέλει να κάνει write(o) Αν RTS(O) > TS(Tj) [ήτοι, η Τj ξεκίνησε πριν διαβαστεί το O], abort & restart Tj. Αν WTS(O) > TS(Tj), ΜΗΝ ΕΚΤΕΛΕΣΕΙΣ ΤΟ write(o), και συνέχισε την Τj µε την επόµενη εντολή (Thomas Write Rule) Αλλιώς, επέτρεψε το write(o) Τi TS(Ti) < TS(Tj) Τj Ο action aj XX(O) < TS(Tj) 65 Thomas write rule Αν WTS(O) > TS(Tj) σηµαίνει ότι η Τj ξεκίνησε ΠΡΙΝ από τη δοσοληψία που έγραψε το Ο (έστω Τ). Έτσι, η εγγραφή της Τj δεν έχει καµιά αξία (σε ένα σειριακό πρόγραµµα, η Τ θα ξαναέγραφε πάνω στην τιµή της Τj) Thomas Write Rule: Μπορούµε να αγνοήσουµε µε ασφάλεια καθυστερηµένες εγγραφές! Τj Ο Tj R(A) W(A) Commit T Τ Ο W(A) Commit 66

ΠΡΟΣΟΧΗ Πρέπει η Τ να έχει κάνει COMMIT Το παράδειγµα του βιβλίου είναι παραπλανητικό: αντί για Τj και Τ έχει Τ και Τ. Αυτό που αγνοείται είναι το W(A) της Τ! T R(A) W(A) Commit T W(A) Commit 67 Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 68

Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις Ιδέα: Κάθε δοσοληψία που γράφει ένα αντικείµενο Ο, κατασκευάζει µια ιδιωτική της κόπια του Ο που αποθηκεύεται σε µια Version pool MAIN SEGMENT (Τρέχουσες versions της DB) O O O VERSION POOL (παλαιότερες εκδόσεις µπορεί να είναι χρήσιµες για άλλες δοσοληψίες). Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις Κάθε δοσοληψία έχει χρονόσηµο TS τη στιγµή εκκίνησής της Κάθε version ενός αντικειµένου έχει WTS το χρονόσηµο της δοσοληψίας που την έγραψε και RTS το χρονόσηµο της δοσοληψίας που τη διάβασε τελευταία. Οι versions του ιδίου αντικειµένου συνδέονται µε pointers σε µια λίστα.

Ανάγνωση WTS timeline old new Για να διαβάσει µια δοσοληψία Τ: Βρίσκει την τελευταία version µε WTS < TS(T). (Αν δεν της κάνει η τρέχουσα version ψάχνει για προηγούµενες) Αν υποθέσουµε ότι για κάθε αντικείµενο υπάρχει και µια version οι δοσοληψίες που διαβάζουν µόνο (χωρίς να γράφουν ποτέ) δεν αποτυγχάνουν ποτέ. T Εγγραφή Για να γράψει µια δοσοληψία Τ: Βρίσκει τη νεότερη version V τ.ω. WTS < TS(T). Αν RTS(V) < TS(T), T κάνει µια κόπια CV του V, µε WTS(CV) = RTS(CV) = TS(T) (η εγγραφή αναµένει µέχρι το commit της Τ - οι άλλες δοσοληψίες δεν µπορούν να δουν την version CV) Αλλιώς, abort & restart µε νέο TS. WTS old CV new V RTS(V) T

Εγγραφή Αν RTS(V) < TS(T), πάει να πει ότι κάποια Τ διάβασε πριν ξεκινήσει η δοσοληψία Τ => η Τ µπορεί να γράψει [το πολύ πολύ να κάνει overwrite ότι θα έγραφε η Τ ] Αν RTS(V) > TS(T) προφανώς κάποια Τ διάβασε αφού ξεκίνησε η Τ => κάποια πρέπει να κάνει abort & επιλέγουµε την Τ WTS old CV new V T RTS(V) Θεµατολόγιο Φαντάσµατα Κλείδωµα δέντρων Κλείδωµα σε διαφορετικά επίπεδα διακριτότητας Πώς τα βάζω όλα µαζί Αισιόδοξος έλεγχος ταυτοχρονισµού Έλεγχος ταυτοχρονισµού µε χρονόσηµα Έλεγχος ταυτοχρονισµού µε πολλαπλές εκδόσεις οσοληψίες και SQL 74

οσοληψίες και SQL Στην SQL-9 κάθε δοσοληψία έχει: Μέθοδο πρόσβασης: READ ONLY vs. READ WRITE Ένα από 4 επιτρεπτά επίπεδα αποµόνωσης: READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Παράδειγµα χρήσης: SET ISOLATION LEVEL SERIALIZABLE READ WRITE 75 οσοληψίες και SQL READ UNCOMMITTED: εν υποστηρίζει κλειδώµατα. Επιτρέπεται µόνο σε READ ONLY δοσοληψίες READ COMMITTED: Κρατά X-locks για writes, και τα ελευθερώνει στο ΕΟΤ Κρατά S-locks για reads, και τα ελευθερώνει αµέσως εν έχει πρόβληµα µε dirty reads (W-R συγκρούσεις), αλλά έχει πρόβληµα σε unrepeatable reads (R-W συγκρούσεις) 76

οσοληψίες και SQL RΕPEATABLE READ: ιαβάζει µόνο ότι προκύπτει από committed δοσοληψίες Ελευθερώνει locks στο τέλος (S-locks & X-locks) Ευάλωτη σε φαντάσµατα SERIALIZABLE: Αυστηρό PL Ανεπηρέαστη από φαντάσµατα 77 SQL-9 Επίπεδο Read Uncommitted Dirty Read Ίσως Μη επαναλαµβανόµενη ανάγνωση Ίσως Πρόβληµα φαντάσµατος Ίσως Read Committed Όχι Ίσως Ίσως Repeatable Reads Όχι Όχι Ίσως Serializable Όχι Όχι Όχι 78

Σήµερα IBM DB, Informix, Sybase MS SQL Server: Strict PL (ή πιο χαλαρό πρωτόκολλο αν δεν ζητηθεί SERIALIZABLE isolation level) Oracle 8: multiversion concurrency control MS SQL Server: επιπλέον, επιτρέπει και optimistic concurrency control 79 Για εµβάθυνση, εµπέδωση και επέκταση... Hal Berenson, Philip A. Bernstein, Jim Gray, Jim Melton, Elizabeth J. O'Neil, Patrick E. O'Neil: A Critique of ANSI SQL Isolation Levels. SIGMOD Conference 995 80