Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης Ονοµατεπώνυµο: Αριθµός Μητρώου: Τελική Εξέταση (3 ώρες) Ηµεροµηνία: 7 Σεπτεµβρίου 2004 Θέµα 1 (15 µονάδες) ( ιαχείριση οσοληψιών) Αποφασίστε αν οι παρακάτω προτάσεις είναι αληθείς ή ψευδείς και δικαιολογείστε την απάντησή σας 1. Κάθε πρόγραµµα σύγχρονης εκτέλεσης που παράγεται από έναν προγραµµατιστή δοσοληψιών (transaction scheduler) που χρησιµοποιεί διαµοιραζόµενο (shared) και αποκλειστικό (exclusive) κλείδωµα είναι σειριακοποιήσιµο (serializable). Η πρόταση είναι αληθής. Όλοι οι προγραµµατιστές δοσοληψιών που χρησιµοποιούν διαµοιραζόµενο (shared) και αποκλειστικό (exclusive) κλείδωµα, παράγουν προγράµµατα σύγχρονης εκτέλεσης που είναι conflictserializable. Στη χειρότερη περίπτωση, παράγουν σειριακά προγράµµατα εκτέλεσης. Παραδειγµα: 2PL 2. Η τεχνική Undo Logging είναι λιγότερο αποδοτική από τις τεχνικές Redo Logging και Undo / Redo Logging. H πρόταση είναι ψευδής. Παράδειγµα όπου η χρήση Undo logging είναι αποδοτικότερη: append-only archives. 3. Η χρήση της στρατηγικής LRU (least recently used) για την αντικατάσταση των σελίδων της ενδιάµεσης µνήµης (buffer replacement policy) είναι η καλύτερη επιλογή όταν χρησιµοποιούµε extensible hashing. H πρόταση είναι ψευδής. Υπάρχει περίπτωση να αντικατασταθούν µπλοκ που περιέχουν το directory. Θέµα 2 (15 µονάδες) ( ιαχείριση οσοληψιών) Σας δίνεται το παρακάτω πρόγραµµα σύγχρονης εκτέλεσης S = R1(X), R2(X), W1(Y), R3(Y), W1(Z), W2(Y), C1, W3(Z), C3, C2
1. Κατασκευάστε το γράφο προτεραιότητας (precedence graph) και αποφασίστε αν το S είναι conflict-serializable. G = T1 T3 T2 O γράφος δεν περιέχει κύκλο, άρα είναι conflict-serializable 2. ώστε ένα ισοδύναµο πρόγραµµα σύγχρονης εκτέλεσης S το οποίο ακολουθεί το πρωτόκολλο 2PL. S = R1(X), W1(Y), W1(Z), C1, R2(X), R3(Y), W3(Z), C3, W2(Y), C2 3. Είναι απαραίτητη η κατασκευή γράφου προτεραιότητας για το S προκειµένου να αποφασίσουµε αν είναι conflict-serializable; Γιατί; Όχι. Το εγγυάται το 2PL. Θέµα 3 (20 µονάδες) ( ιαχείριση οσοληψιών) Θεωρείστε ότι τα στοιχεία A,B,C,D,E, τα οποία αποθηκεύονται σε µια βάση δεδοµένων, έχουν στην τρέχουσα κατάστασή της τις τιµές 10, 12, 45, 65 και 2 αντίστοιχα. Θεωρείστε επίσης το ακόλουθο log για τη βάση δεδοµένων: <START T1> <T1, C, 35> <T1, D, 450> <START T2> <T2, C, 18> <T2, B, 12> <T1, D, 500> <COMMIT T1> <START CKPT (T2)> <END CKPT> <T2, D, 18> <START T3> <T3, C, 45> <T3, E, 2> <T2, A, 10> <COMMIT T3> <COMMIT T2> 1. Θα µπορούσε το παραπάνω log να είναι ένα undo log για τις ενέργειες οι οποίες είχαν σαν αποτέλεσµα τα στοιχεία A,B,C,D,E να έχουν τις τρέχουσες τιµές; Γιατί; Όχι γιατί σε ένα undo log, όλες οι ενεργές δοσοληψίες στην αρχή του checkpoint πρέπει να κάνουν commit πριν το τέλος του checkpoint.
2. Θα µπορούσε το παραπάνω log να είναι ένα redo log για τις ενέργειες οι οποίες είχαν σαν αποτέλεσµα τα στοιχεία A,B,C,D,E να έχουν τις τρέχουσες τιµές; Γιατί; Όχι γιατί θα έπρεπε η τιµή του D να είναι 500 αφού η Τ1 κάνει commit πριν από το checkpoint ή 18, η τιµή δηλαδή που γράφει η Τ2. Θέµα 4 (20 µονάδες) (Βελτιστοποίηση Επερωτήσεων) Σας δίνεται το ακόλουθο σχεσιακό σχήµα (τα κλειδιά είναι υπογραµµισµένα): EMPLOYEE (SSN, Name, Dept) PROJECT (SSN, PID, Name, Budget) Το γνώρισµα SSN (δηλ. ο κωδικός αριθµός ενός υπαλλήλου που εργάζεται σε ένα έργο) είναι εξωτερικό κλειδί στον πίνακα PROJECT. Σε ένα έργο µπορούν να εργάζονται πολλοί υπάλληλοι, ωστόσο ισχύει και η συναρτησιακή εξάρτηση PID Name, Budget (συνεπώς ο πίνακας PROJECT δεν έχει κανονικοποιηθεί). Υποθέστε τα παρακάτω στατιστικά στοιχεία για την σχεσιακή βάση δεδοµένων EMPLOYEE- PROJECT: 10.000 πλειάδες (tuples) στον πίνακα EMPLOYEE 20.000 πλειάδες (tuples) στον πίνακα PROJECT 40 πλειάδες ανά µπλοκ (Μπλοκing factor) για κάθε πίνακα Αποταµιευτής (buffer) 10 µπλοκ Το γνώρισµα E.Name έχει 1.000 διακριτές τιµές Το γνώρισµα Budget παίρνει ακέραιες τιµές από 1 έως το 100 (οµοιόµορφα κατανεµηµένες) Ευρετήρια: a. Πίνακας EMPLOYEE: i. Στο Name: Unclustered, hash ii. Στο SSN, Clustered, 3-level B + tree b. Πίνακας PROJECT: i. Στο SSN: Unclustered, hash ii. Στο Budget: Clustered, 2-level B + tree 1. (4 µονάδες) Σχεδιάστε σε δενδρική µορφή την αλγεβρική έκφραση της παρακάτω επερώτησης SQL όπου οι επιλογές και οι προβολές (σ,π) έχουν προωθηθεί (push) όσο το δυνατόν περισσότερο πιο κοντά στους πίνακες: SELECT P.Budget, E.Name, P.Name FROM EMPLOYEE E, PROJECT P WHERE E.SSN= P.SSN AND P.Budget >99 AND E.Name = John ORDER BY P.Budget
ORDER BY Budget π Budget, EmpName, ProjName SSN =SSN Rename EMPLOYEE.Name to EmpName and PROJECT.Name to ProjName π Name, SSN π SSN, Budget, Name σ Name= John σ Budget>99 EMPLOYEE PROJECT 2. (16 µονάδες) Βρείτε το «καλύτερο» πλάνο εκτέλεσης της αλγεβρικής έκφρασης του προηγούµενου ερωτήµατος. ικαιολογήστε την απάντησή σας δίνοντας το κόστος εκτέλεσης κάθε τελεστή της αλγεβρικής έκφρασης. Select EMPLOYEE στο Name και PROJECT στο Budget. r E =10000, r P =20000, bfr=40, n B =10, d E.Name =1000, d P.Budget =100 Κόστος του selection: σ Name= John s =r/d=10000/1000 = 10 Έχουµε unclustered hash index στο Name (θεωρώντας 1.2 disk I/O ανά index search) cost1 = 1.2 x 10 = 12 µπλοκ accesses. Το αποτέλεσµα θα περιέχει 10 πλειάδες. Αριθµός µπλοκs για το αποτέλεσµα, b1 = s/bfr = 10/40 = 1 µπλοκ. Κόστος του selection: σ Budget >99 s =r/d = 20000/100 = 200 Έχουµε Clustered, 2-level B + tree index cost2 = x + s/bfr = 2 + 200/40 = 2 + 5 = 7 µπλοκ accesses. Αριθµός µπλοκs για το αποτέλεσµα, b2 = s/bfr = 200/40 = 5 µπλοκs. Κόστος του join και του project Τα αποτελέσµατα b1 και b2 µπορούν να αποθηκευτούν στην κύρια µνήµη. n B = 10 b1 + b2 = 1 + 5 = 6 b1 + b2 < n B Θα χρησιµοποιηθεί Sort-Merge-Join, και στη συνέχεια project. Μπορούµε να ταξινοµήσουµε τα πάντα στη µνήµη (n B > b1+b2) και µετά να κάνουµε merge, select και project σε pass (επίσης στη µνήµη). Έτσι το συνολικό κόστος θα είναι cost1 + cost2 = 12 + 7 = 19 µπλοκ accesses.
Θέµα 5 (20 µονάδες) (Εξωτερική Ταξινόµηση) Θέλουµε να ταξινοµήσουµε (sort) τις ακόλουθες τιµές 84, 22, 19, 11, 60, 68, 31, 29, 58, 23, 45, 93, 48, 31, 7 κάνοντας τις παρακάτω υποθέσεις: Έχουµε διαθέσιµη µνήµη για ταξινόµηση 3 αποταµιευτές ενός µπλοκ Θέλουµε να χρησιµοποιήσουµε εξωτερική ταξινόµηση µε 2-way merge Ένα µπλοκ µπορεί να αποθηκεύσει µέχρι 2 τιµές 1. (10 µονάδες) Για κάθε πέρασµα (pass) της ταξινόµησης δείξτε το περιεχόµενο όλων των ενδιάµεσων αρχείων στο παρακάτω διάγραµµα. Σηµείωση: To αρχικό στάδιο του αλγορίθµου σας δίνεται παρακάτω. Για την απάντηση της άσκησης χρειάζεται µόνο να συµπληρώσετε τα κενά στο διάγραµµα. 84, 22 19,11 60,68 31,29 58,23 45,93 48,31 7 22,84 11,19 60,68 29,31 23,58 45,93 31,48 7 11,19 29,31 23,45 7,31 22,84 60,68 58,93 48 11,19 22,29 31,60 68,84 7,11 19,22 23,29 31,31 45,48 58,60 68,84 93 7,23 31,45 48,58 93 2. (5 µονάδες) Ποιος είναι ο ελάχιστος αριθµός περασµάτων που χρειάζεστε για να ταξινοµήσετε 100 σελίδες δεδοµένων (του ενός µπλοκ) έχοντας στην διάθεσή σας µνήµη 10 µπλοκ; ικαιολογήστε την απάντησή σας.
log B 1 N / = 1+ log 10 = 1+ 2 = 3 1+ B 9 3. (5 µονάδες) Ποιος είναι ο ελάχιστος αριθµός µπλοκ µνήµης που χρειάζεστε για να ταξινοµήσετε σε 3 περάσµατα 500.000 σελίδες δεδοµένων (του ενός µπλοκ); ικαιολογήστε την απάντησή σας. Σηµείωση: Η εξίσωση log a x=b είναι ισοδύναµη µε την εξίσωση a b =x. Solve the equation 1+ log 1 500000 / B = 3 ( B 1) 2 2 = 500000/ B or < B( B 1) B for B to get N so B=81 (or B=80 is acceptable). Θέµα 6 (10 µονάδες) (Ευρετήρια Κατακερµατισµού) Μια σχεσιακή βάση δεδοµένων χρησιµοποιεί ευρετήρια κατακερµατισµού (hash indexes) µε τα παρακάτω χαρακτηριστικά: Ένα µπλοκ µπορεί να αποθηκεύσει µέχρι 60 κλειδιά αναζήτησης. Ο πίνακας τον οποίο θέλουµε να ευρετηριάσουµε περιέχει 3600 εγγραφές. Το γνώρισµα του πίνακα στο οποίο δηµιουργούµε το ευρετήριο µπορεί να περιέχει διπλότυπα. Σηµείωση: Θυµηθείτε ότι ένας πίνακας κατακερµατισµού δεν περιέχει τις εγγραφές µιας σχέσης αλλά αναφορές (pointers) σ αυτές τις εγγραφές. 1. (2.5 µονάδες) Χρησιµοποιώντας γραµµικό κατακερµατισµό (linear hash index) µέσης κάλυψης (average utilization) 30%, πόσα µπλοκ χρειάζονται στην χειρότερη περίπτωση οι κάδοι (buckets) που δηµιουργούνται; Η χειρότερη περίπτωση είναι όταν όλες οι εγγραφές έχουν την ίδια τιµή κλειδιού. Τότε θα τοποθετηθούν σε ένα µπλοκ, και επιπλέον σε µπλοκ υπερχείλισης, συνολικά, λοιπόν, σε 3600/60 = 60 µπλοκ. Για την επίτευξη 30% χρήσης, ο πίνακας κατακερµατισµού πρέπει να έχει (60*100/30) = 200 µπλοκ, 199 άδεια και 1 γεµάτο (µε 59 υπερχείλισης σε αλυσίδα). 2. (2.5 µονάδες) Στην προηγούµενη περίπτωση, πόσες προσπελάσεις Ε/Ε µας κοστίζει η αναζήτηση (lookup) ενός κλειδιού (µαζί µα την ανάγνωση της εγγραφής); 61 IOs: 1 για την ανάγνωση του κάδου, συν 59 για την ανάγνωση του τελευταίου µπλοκ στην αλυσίδα υπερχείλισης, συν 1 για την ανάγνωση της εγγραφής δεδοµένων. 3. (2.5 µονάδες) Χρησιµοποιώντας επεκτάσιµο κατακερµατισµό (extensible hash index), ποιο είναι το µεγαλύτερο δυνατό µέγεθος (χείριστη περίπτωση) του πίνακα κατακερµατισµού;
εν υπάρχει όριο η χειρότερη περίπτωση και πάλι προκύπτει όταν όλες οι εγγραφές έχουν όµοια κλειδιά. 4. (2.5 µονάδες) Χρησιµοποιώντας επεκτάσιµο κατακερµατισµό (extensible hash index), ποιο είναι το µικρότερο δυνατό µέγεθος (βέλτιστη περίπτωση) του πίνακα κατακερµατισµού; Στη βέλτιστη περίπτωση, ο πίνακας κατακερµατισµού έχει 64 µπλοκ (60 για τα δεδοµένα, έτσι 32 στοιχεία (entries) δεν αρκούν για να δείξουν προς αυτά τα 60 µπλοκ).