550 likes | 685 Views
Θέματα Hash Join. Κώστας Λίλλης Ελένη Γεώργα. Θεματολόγιο. Binary Hash Joins Binary Hash Joins with Aggregation Multi-Way Hash Joins Implementation Details False Drop Analysis XJoin. Θεματολόγιο. Binary Hash Joins Binary Hash Joins with Aggregation Multi-Way Hash Joins
E N D
Θέματα Hash Join Κώστας Λίλλης ΕλένηΓεώργα
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
Binary Hash Joins • Η μία σχέση (build input) χωράει στη μνήμη • Διαβάζεται η build input και δημιουργείται ο πίνακας κατακερματισμού με βάση το πεδίο της συνένωσης • Διαβάζονται μία-μία οι εγγραφές της άλλης σχέσης (probe input) και παράγεται το αποτέλεσμα της συνένωσης • Το build input δεν χωράει στη μνήμη • Διαβάζονται οι δύο σχέσεις και διαμερίζονται αναδρομικά με βάση μια συνάρτηση κατακερματισμού στο πεδίο της συνένωσης σε διαμερίσεις που χωράνε στη μνήμη • Πραγματοποιείται Binary Hash Join μεταξύ των αντίστοιχων διαμερίσεων των δύο σχέσεων
X Διαμέριση (Partitioning) R S Partitions of R Partitions of S 21 … 27 … 27 … 21 … 27 … Hash Table . . . . . . . . . . . . . . . . 4 … 6 … 9 … 18 … 9 … 6 … 4 … 18 … 18 … 4 … 6 … 9 … 18 … . . . . . . . .
Binary Hash Joins • Η πρώτη περίπτωση ονομάζεται in-memory hash join • Η δεύτερη περίπτωση • Όταν δεν χρειάζονται πολλαπλά επίπεδα διαμέρισης ονομάζεται Grace hash join • Όταν χρειάζονται πολλαπλά επίπεδα διαμέρισης ονομάζεται recursive hash join • Συνδυασμός των δύο περιπτώσεων ονομάζεται hybrid hash join • Κάποια buckets (που χωράνε στη μνήμη) γίνονται build και probe στη μνήμη, ενώ οι εγγραφές που ανήκουν στα υπόλοιπα buckets (που δεν χωράνε στη μνήμη) τοποθετούνται (spill) σε διαμερίσεις στο δίσκο • Οι spilled διαμερίσεις συνενώνονται με Grace ή recursive hash join
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
Binary Hash Joins with Grouping/Aggregation • Ερωτήσεις που περιέχουν ένα joinκαι ένα group by • Παράδειγμα ερώτησης: συνολική τιμή όλων των παραγγελιών ομαδοποιημένες με βάση την πόλη. select c.City, sum(o.Value) from Customer c, Order o where c.C# = o.C# groupby c.City; Customer(C#, City) Order(O#, C#, Value)
Traditional Execution Plan select c.City, sum(o.Value) from Customer c, Order o where c.C# = o.C# groupby c.City; • Βήματα εκτέλεσης • Διαμερίζονται οι σχέσεις Customer και Order με βάση το πεδίο της συνένωσης C# • Πραγματοποιείται η συνένωση των αντίστοιχων διαμερίσεων (partition) και προκύπτει το ενδιάμεσο αποτέλεσμα • Αν το ενδιάμεσο αποτέλεσμα δεν χωράει στη μνήμη διαμερίζεταιμε βάση το πεδίο City • Πραγματοποιείται η ομαδοποίηση και η συνάθροιση σε κάθε διαμέριση και παράγεται το τελικό αποτέλεσμα Agg City Ptn on City C# Ptn on C# Ptn on C# Customer Order
Generalized Hash Teams select c.City, sum(o.Value) from Customer c, Order o where c.C# = o.C# groupby c.City; • Βήματα εκτέλεσης • Διαμερίζεται η σχέση Customer με βάση το πεδίο City και ταυτόχρονα δημιουργείται ένα bitmap για κάθε διαμέριση • Με βάση τα bitmaps πραγματοποιείται η έμμεση διαμέριση της σχέσης Order (ως προς το City) • Πραγματοποιείται η συνένωση των αντίστοιχων διαμερίσεων (partition) και προκύπτει το ενδιάμεσο αποτέλεσμα • Πραγματοποιείται η ομαδοποίηση και η συνάθροιση σε κάθε διαμέριση και παράγεται το τελικό αποτέλεσμα Agg City C# Bit- maps (BM) Ptn on City Ptn on BM Order Customer
Generalized Hash Teams 1+(4 mod 10) = 5 1+(3 mod 10) = 4 1+(9 mod 10) = 10 1+(4 mod 10) = 5 1+(25 mod 10) = 6
Generalized Hash Teams AggrCity C#
Generalized Hash Teams AggrCity C#
Generalized Hash Teams AggrCity C#
Generalized Hash Teams – False Drops • Η τοποθέτηση μιας πλειάδας της σχέσης η οποία διαμερίζεται με βάση το bitmap, σε κάποια / ες επιπλέον διαμερίσεις ονομάζεται false drop • Τα false drop δεν επηρεάζουν τη σωστή λειτουργία του αλγορίθμου αλλά έχουν αρνητικό αντίκτυπο στην απόδοση (Ι/Ο) • Ο αριθμός των false drops εξαρτάται από το μήκος του bitmap και τη συνάρτηση κατακερματισμού
Generalized Hash Teams vs. Traditional Execution Plan • Μειώνει το κόστος I/O που προκύπτει από την διαμέριση του ενδιάμεσου αποτελέσματος όταν αυτό δεν χωράει στην Κύρια Μνήμη • Απαιτούν επιπρόσθετο χώρο στη μνήμη και CPU time για τα bitmaps • Πιθανόν να αυξηθεί το κόστος I/O όταν υπάρχουν false drops • Καταλληλότερα όταν υπάρχει συναρτησιακή εξάρτηση του πεδίου συνάθροισης από το πεδίο συνένωσης • Διαφορετικά το κόστος I/O αυξάνεται λόγω της τοποθέτησης πλειάδων σε πολλαπλές διαμερίσεις (partition overlapping)
Partition Nested Loops select c.City, sum(o.Value) from Customer c, Order o where c.C# = o.C# groupby c.City; • Βήματα εκτέλεσης • Η σχέση Customer διαμερίζεται με βάση το πεδίο City • Διαβάζεται η σχέση Order, προβάλλονται τα σχετικά πεδία, εφαρμόζονται (αν υπάρχουν) τα predicates και η τροποποιημένη σχέση Order γράφεται στο δίσκο • Διαβάζεται η πρώτη διαμέριση της σχέσης Customer και δημιουργείται ένα hash table στη μνήμη με βάση το πεδίο C#. Διαβάζεται η τροποποιημένη σχέση Order (ανά block) και βρίσκονται οι πλειάδες τηςπου αντιστοιχούν στης πλειάδες της διαμέρισης της σχέσης Customer. Ταυτόχρονα εκτελείται η συνάθροιση • Επαναλαμβάνεται το βήμα 3 για όλες τις υπόλοιπες διαμερίσεις της σχέσης Customer • Τα βήματα 2 και 3 για την πρώτη διαμέριση της σχέσης Customer μπορούν να εκτελεστούν ταυτόχρονα ώστε μειωθεί το κόστος I/O • Αν δεν κερδίζουμε κάτι από το βήμα 2 αυτό μπορεί να παραλειφθεί
Partition Nested Loopsvs. Generalized Hash Teams • Υψηλό κόστος αν η σχέση Customer είναι μεγάλη (που συνεπάγεται περισσότερες διαμερίσεις άρα και περισσότερες αναγνώσεις της σχέσης Order) • Καλύτερη απόδοση αν αναμένεται να υπάρχουν πολλά false drops • Χρειάζονται λιγότερη μνήμη στη φάση της διαμέρισης (δεν υπάρχουν bitmaps)
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
T R S R A A Result S A A T A A TraditionalMulti-Way Hash Join • Βήματα εκτέλεσης • Διαμερίζονται οι σχέσεις R, S με βάση το πεδίο A • Συνενώνονται οι αντίστοιχες διαμερίσεις και δημιουργεί-ται το ενδιάμεσο αποτέλεσμα • Διαμερίζονται το ενδιάμεσο αποτέλεσμα και η σχέση Τ • Συνενώνονται οι αντίστοιχες διαμερίσεις και παράγεται το τελικό αποτέλεσμα R.A S.A T.A
T R S R A R.A Result S A S.A T T.A A A A A Multi-Way Hash Teams Join • Βήματα εκτέλεσης • Διαμερίζονται σε ένα πέρασμα οι σχέσεις R, S, T • Συνενώνονται οι αντίστοιχες διαμερίσεις (όπως φαίνεται στο σχήμα) και παράγεται το τελικό αποτέλεσμα.
Multi-Way Hash Teams Joinvs. TraditionalMulti-Way Hash Join • Μείωση του κόστους I/O διότι διαμερίζονται μόνο οι σχέσεις που συνενώνονται και όχι τα ενδιάμεσα αποτελέσματα • Μπορεί να γίνει μόνο αν όλες οι συνενώσεις γίνονται με βάση το ίδιο πεδίο • Λύση Generalized Hash Team Join
T R S B B A Β Multi-Way Generalized Hash Teams Join • Βήματα εκτέλεσης • Διαμερίζεται η σχέση R με βάση το πεδίο Α • Διαμερίζεται η σχέση S με βάση το πεδίο Α και ταυτόχρονα δημιουργούνται τα bitmaps με βάση το B • Διαμερίζεται η σχέση T με βάση τα bitmaps. • Συνενώνονται οι αντίστοιχες διαμερίσεις (όπως φαίνεται στο σχήμα) και παράγεται το τελικό αποτέλεσμα. R A R.A Result S A S.A Bitmaps on B(BT.B) T BT.B
Multi-Way Generalized Hash Teams Join with Grouping/Aggregation • Παράδειγμα ερώτησης με διπλή συνένωση, group by και aggregation • Συνολικό κόστος όλων των παραγγελιών ομαδοποιημένες με βάση την πόλη select c.City, sum(l.Price) from Customer c, Order o, Lineitem l where c.C# = o.C# and l.O# = o.O# groupby c.City; Customer(C#, City) Order(O#, C#, Value) Lineitem(l#, O#, Price)
Multi-Way Generalized Hash Teams Join with Grouping/Aggregation select c.City, sum(l.Price) from Customer c, Order o, Lineitem l where c.C# = o.C# and l.O# = o.O# groupby c.City; • Τρόπος εκτέλεσης της ερώτησης (Generalized Hash Team Join) • Διαμερίζεται η σχέση Customer με βάση το πεδίο City και ταυτόχρονα δημιουργούνται τα bitmaps με βάση το πεδίο C# • Διαμερίζεται η σχέση Order με βάση τα bitmaps που δημιούργησε η Customer και ταυτόχρονα δημιουργούνται τα bitmaps με βάση το πεδίο Ο# • Διαμερίζεται η σχέση Lineitem με βάση τα bitmaps που δημιούργησε η Order • Πραγματοποιείται η συνένωση των αντίστοιχων διαμερίσεων
Multi-Way Generalized Hash Teams Join with Grouping/Aggregation Στο παράδειγμά μας οι συνενώσεις των διαμερίσεων μπορούν να εκτελεστούν με δύο διαφορετικές διατάξεις. Η απόφαση λαμβάνεται με βάση το κόστος εκτέλεσης
Multi-Way Generalized Hash Teams Join with Grouping/Aggregation • Το κόστος μνήμης αυξάνεται λόγω της διατήρησης δύο συνόλων bitmaps (με βάση το C# και με βάση το O#) • Το κόστος αυτό μπορεί να μειωθεί διαγράφοντας τα bitmaps με βάση το C# μετά τη διαμέριση της σχέσης Order • Στο παράδειγμα υπάρχουν οι συναρτησιακές εξαρτήσεις Ο# C# City άρα το generalized hash team join είναι η κατάλληλη τεχνική (no overlapping partitions)
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
Implementation Details – Fine-Tuning the Indirect Partitioning Phase collision Bitmaps used B1 B2 B3 used = B1|B2| … | Bn 1 : if exists ij{1,…,n} s.t. Bi[k]==Bj[k]==1 collision[k]= 0 : otherwise
Teaming up the Hash Join and the Aggregation – Build Phase 5 25 13 23 PA M
Teaming up the Hash Join and the Aggregation – Probe Phase 5 25 13 23 10 1 PA M
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
select c.City, sum(o.Value) from Customer c, Order o where c.C# = o.C# groupby c.City; F. D. Analysis B1 C1 O1 i j C O B2 C2 O2 i j C3 O3 B3 i h( ) = h( ) = i h( ) = h( ) = j j
False Drop Analysis - Binary Hash Joins with Grouping/Aggregation • n : αριθμός διαμερίσεων • b : μήκος κάθε bitmap της σχέσης Customer • c : πλήθος customers • o : πλήθος orders • η πιθανότητα ένας customer να θέσει ένα bit των bitmap • η πιθανότητα ένας customer να μη θέσει το συγκεκριμένο bit των bitmap • η πιθανότητα μόνο ένας customer να έχει θέσει το συγκεκριμένο bit των bitmap • η πιθανότητα παραπάνω από ένας customer να έχει θέσει το συγκεκριμένο bit των bitmap πιθανότητα για ένα false drop
False Drop Analysis - Binary Hash Joins with Grouping/Aggregation • ο συνολικός αριθμός των false drops για όλα τα orders σε όλες τις n -1 διαμερίσεις • Υποθέσεις • Η συνάρτηση κατακερματισμού θέτει ομοιόμορφα τα bit σε κάθε bitmap (διαφορετικά ο αριθμός των false drops θα ήταν πολύ μεγάλος) • Οι customers κατανέμονται ομοιόμορφα στις διαμερίσεις (διαφορετικά ο αριθμός των false drops θα μειώνονταν) • Τύπος με μικρότερο υπολογιστικό κόστος • η πιθανότητα δύο customers να θέσουν το ίδιο bit
False Drop Analysis – Multi-way Hash Joins select c.City, sum(l.Price) from Customer c, Order o, Lineitem l where c.C# = o.C# and l.O# = o.O# groupby c.City; • Για τη διαμέριση της σχέσης Order ισχύει η προηγούμενη ανάλυση • Κατά τη διαμέριση της σχέσης Lineitem εμφανίζονται false drops με δύο τρόπους: • Orders που ανήκουν σε διαφορετικές διαμερίσεις θέτουν το ίδιο bit στους bitmaps. • Τα false drops που εμφανίζονται κατά τη διαμέριση της σχέσης Order προκαλούν false drops κατά τη διαμέριση της σχέσης Lineitem (false drop propagation)
F. D. Analysis B1 O1 L1 i j O L B2 O2 L2 i j O3 L3 B3 select c.City, sum(l.Price) from Customer c, Order o, Lineitem l where c.C# = o.C# and l.O# = o.O# groupby c.City; h( ) = i h( ) = j
False Drop Analysis – Multi-way Hash Joins select c.City, sum(l.Price) from Customer c, Order o, Lineitem l where c.C# = o.C# and l.O# = o.O# groupby c.City; • l : πλήθος lineitems • bο : μήκος κάθε bitmap της σχέσης Order • fο : εκτίμηση του αριθμού των false drops κατά τη διαμέριση της σχέσης Order • ο αριθμός των false drop για την πρώτη περίπτωση • ο αριθμός των false drop για την δεύτερη περίπτωση
Θεματολόγιο • Binary Hash Joins • Binary Hash Joins with Aggregation • Multi-Way Hash Joins • Implementation Details • False Drop Analysis • XJoin
Xjoin - Γενικά • Απευθύνεται σε ερωτήσεις πάνω σε ευρέως κατανεμημένες πηγές δεδομένων • Τα δεδομένα (σχέσεις - πλειάδες) προέρχονται από απομακρυσμένες πηγές • Αυτό επιφέρει καθυστέρηση στην παραγωγή αποτελέσματος λόγω • Καθυστέρησης στην άφιξη των πρώτων δεδομένων (πλειάδων) • Αργού ρυθμού άφιξης δεδομένων • Bursty άφιξης δεδομένων
Xjoin - Γενικά • Επιτυγχάνει καλύτερη αλληλεπιδραστική απόδοση παράγοντας αποτελέσματα «αυξητικά» • Επιτρέπει την συνεχή εκτέλεση της ερώτησης ακόμα και όταν τα δεδομένα καθυστερούν από μία ή και της δύο πηγές. Πως; • Επεξεργασία στο background δεδομένων που έχουν ληφθεί προηγουμένως, ενώ δεν φθάνουν δεδομένα από τις πηγές
Xjoin - Θέματα • Διαχείριση ροής δεδομένων μεταξύ μνήμης και σκληρού δίσκου • Έλεγχος της επεξεργασίας που πραγματοποιείται στο background • Παραγωγή όλων των αποτελεσμάτων (πλήρη απάντηση στην ερώτηση) • Απαλοιφή διπλότυπων από το αποτέλεσμα
Xjoin - Λειτουργία • Κάθε είσοδος (σχέση) της ερώτησης διαμερίζεται σε έναν αριθμό από διαμερίσεις με βάση μια συνάρτηση κατακερματισμού • Κάθε διαμέριση PiA μίας σχέσης A αποτελείται από δύο κομμάτια • Ένα κομμάτι που βρίσκεται στη μνήμη MPiA • Ένα κομμάτι που βρίσκεται στο δίσκο DPiA • PiA= MPiADPiAκαι MPiA DPiA = • Κάθε πλειάδα που φθάνει τοποθετείται στην αντίστοιχη διαμέριση αν υπάρχει χώρος στη μνήμη διαφορετικά κάποια διαμέριση μεταφέρεται στο δίσκο
Tuple B Tuple A hash(Tuple A) = 1 hash(Tuple B) = n Memory-resident partitions of source A Memory-resident partitions of source B 1 n 1 k n . . . . . . . . . . . . . . . . . . M E M O R Y flush D I S K 1 . . . n 1 k n . . . . . . SOURCE-A Disk-residentpartitions of source A Disk-residentpartitions of source B SOURCE-B
Xjoin - Λειτουργία • Το XJoin αποτελείται από τρία στάδια • Το πρώτο στάδιο συνενώνει πλειάδες που βρίσκονται στη μνήμη • Μπλοκάρει όταν δεν φθάνουν δεδομένα από καμία πηγή • Τερματίζει όταν έχει λάβει όλες τις πλειάδες από τις δύο πηγές • Το δεύτερο στάδιο συνενώνει πλειάδες της μίας σχέσης που βρίσκονται στο δίσκο με πλειάδες της άλλης σχέσης που βρίσκονται στη μνήμη • Ενεργοποιείται όταν μπλοκάρει το πρώτο στάδιο • Σταματάει όταν επανενεργοποιείται το πρώτο στάδιο • Το τρίτο στάδιο παράγει αποτελέσματα τα οποία δεν παράχθηκαν από τα υπόλοιπα στάδια
XJoin – Στάδιο 1 Output Partitions of source A Partitions of source B j i j i . . . . . . . . . . . . . . . . . . M E M O R Y insert probe probe insert Tuple B Tuple A hash(record A) = i hash(record B) = j SOURCE-B SOURCE-A
i XJoin – Στάδιο 2 Output Partitions of source A Partitions of source B i . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E M O R Y DPiA MPiB probe i D I S K i . . . . . . . . . . . . . . . . . . . . Partitions of source A Partitions of source B
XJoin - Στάδιο 3 • Το πρώτο στάδιο δεν συνενώνει πλειάδες που δεν βρίσκονται ταυτόχρονα στη μνήμη • Το δεύτερο στάδιο δεν συνενώνει δύο πλειάδες αν η μία δεν βρισκόταν στη μνήμη όταν η άλλη μεταφέρθηκε από το δίσκο στη μνήμη • Το τρίτο στάδιο συνενώνει όλες τις διαμερίσεις (που βρίσκονται στη μνήμη ή στο δίσκο) των δύο σχέσεων
Tuple X ATS DTS Απαλοιφή διπλοτύπων από το πρώτο στάδιο • Για κάθε πλειάδα συντηρούνται timestamps • ATS : ο χρόνος όταν η πλειάδα έφθασε από την πηγή • DTS : ο χρόνος όταν η πλειάδα μεταφέρθηκε στο δίσκο Tuple X Παράδειγμα Tuple X 99 235
ATS ATS DTS DTS Tuple B2 Tuple B1 178 348 601 198 Ανίχνευση πλειάδων που συνενώθηκαν στο πρώτο στάδιο Tuple A 102 234 Tuple A 102 234 Overlapping Non-Overlapping • Tuples joined in the first stage • Tuples not joined in the first stage