esecuzione query - Dipartimento di Ingegneria dell`Informazione
Transcript
esecuzione query - Dipartimento di Ingegneria dell`Informazione
ESECUZIONE QUERY • Decomposizione query – – – – Normalizzazione Analisi di correttezza Eliminazione delle ridondanze Ristrutturazione • Localizzazione dei dati – Programma di localizzazione – Riduzioni per framm. orizzontale, verticale, derivata, ibrida • Ottimizzazione query – Modello di costo (funzione costo, statistiche database, caratteristiche risultati intermedi) – Spazio di ricerca e strategia di ricerca – System R: ottimizzazione centralizzata e distribuita – Ottimizzazione con semijoin F.Cesarini - Basi Dati Distribuite esecuzione query 1 Decomp. query + Localizzazione dati • I due passi Decomposizione query + Localizzazione dati trasformano una query (SQL) su relazioni distribuite in una query su frammenti di relazione • La trasformazione effettua anche una sorta di ottimizzazione che però è indipendente dalle caratteristiche dei frammenti (p.es. cardinalità) • Il terzo passo di Ottimizzazione cerca la strategia di esecuzione migliore, cioè l’ordine migliore in cui le operazioni possono essere eseguite F.Cesarini - Basi Dati Distribuite esecuzione query 2 1 Decomposizione query • • • Facciamo riferimento a query SQL; la query in input è supposta sintatticamente corretta Output: espressione in algebra relazionale ( operator tree ) che specifica la query in modo semanticamente corretto e in modo da evitare lavoro ridondante I passi sono – – – – Normalizzazione Analisi di correttezza Eliminazione delle ridondanze Ristrutturazione F.Cesarini - Basi Dati Distribuite esecuzione query 3 Decomposizione query / normalizzazione • • Trasformazione della WHERE in forma normalizzata, es. forma normale congiuntiva ( p11 ∨ p12 … ∨ p1n ) ∧ … ∧ (pm1 ∨ pm2 … ∨ pmn ) Esempio – SELECT Ename FROM EMP, ASG WHERE EMP.Eno = ASG.Eno AND ASG.Jno = ‘P1’ AND (Dur = 12 OR Dur = 24) – Forma normale congiuntiva: EMP.Eno=ASG.Eno ∧ ASG.Jno=‘P1’ ∧ (Dur=12 ∨ Dur=24) – Forma normale disgiuntiva (EMP.Eno=ASG.Eno ∧ ASG.Jno=‘P1’ ∧ Dur=12) ∨ (EMP.Eno=ASG.Eno ∧ ASG.Jno=‘P1’ ∧ Dur=24) • La forma normale congiuntiva in genere è più pratica di quella disgiuntiva F.Cesarini - Basi Dati Distribuite esecuzione query 4 2 Decomp. query / analisi di correttezza • Correttezza per i tipi – Nomi di relazione o di attributo inesistenti – Operatori non applicabili al tipo di attributo • Ename > 200 • Correttezza dal punto di vista della semantica – Nella query compaiono componenti che non contribuiscono alla generazione del risultato – Assenza della condizione di join SELECT Ename, Resp FROM EMP, ASG, PROJ WHERE EMP.Eno = ASG.Eno AND Jname=‘CAD/CAM’ AND Dur >16 AND Title=‘Programmer’ F.Cesarini - Basi Dati Distribuite esecuzione query 5 Dec. query / eliminazione delle ridondanze • Le query effettuate sulle viste vengono arricchite con i predicati con cui le viste sono state definite, quindi il risultato può essere ridondante SELECT Title FROM EMP WHERE (NOT (Title=‘Programmer’) AND (Title=‘Programmer’ OR Title=‘Elect.Eng.’) AND NOT (Title=‘Elect.Eng.’)) OR Ename=‘P.Rossi’ (¬ ¬p1 ∧ (p1 ∨ p2) ∧ ¬p2) ∨ p3 SELECT Title FROM EMP WHERE Ename = ‘P.Rossi’ F.Cesarini - Basi Dati Distribuite esecuzione query 6 3 Decomposizione query / ristrutturazione • • • La query viene riscritta in algebra relazionale Successivamente viene ristrutturata per migliorare le prestazioni Semplice euristica: – Applicare gli operatori unari (selezione/proiezione) il prima possibile per ridurre la dimensione delle relazioni intermedie • Esempio SELECT EMP.Ename FROM PROJ, ASG, EMP WHERE ASG.Eno = EMP.Eno AND ASG.Jno = PROJ.Jno AND EMP.Ename ≠ ‘J.Doe’ AND PROJ.Jname = ‘CAD/CAM’ AND (ASG.Dur =12 OR ASG.Dur = 24) F.Cesarini - Basi Dati Distribuite esecuzione query 7 RISTRUTTURAZIONE / ESEMPIO πEname σDur = 12 ∨ Dur = 24 σJname = ‘CAD/CAM’ σEname ≠ ‘J.Doe’ • Jno • Eno PROJ F.Cesarini - Basi Dati Distribuite ASG EMP esecuzione query 8 4 ALBERO RISTRUTTURATO πEname • Jno πJno, Ename • πJno σJname = ‘CAD/CAM’ PROJ F.Cesarini - Basi Dati Distribuite πJno, Eno Jno πEno, Ename σDur = 12 ∨ Dur = 24 σEname ≠ ‘J.Doe’ ASG EMP esecuzione query 9 Note all’esempio di ristrutturazione • • Si ricordi che l’esecuzione del query tree è dalle foglie verso la radice Nell’esempio di ristrutturazione del query tree – Le selezioni sono state avvicinate alle foglie – Sono state introdotte delle proiezioni • • Nell’espressione relazionale sono stati scambiati degli operatori e introdotte delle operazioni Manipolazione algebrica delle espressioni relazionali – Ci sono regole (dimostrate formalmente) che possono essere applicate – Proprietà commutativa di certi operatori, proprietà distributiva, … • La manipolazione algebrica delle espressioni relazionali è uno degli strumenti che si hanno per l’ottimizzazione F.Cesarini - Basi Dati Distribuite esecuzione query 10 5 Localizzazione dei dati • Programma di localizzazione: un programma in algebra relazionale che opera sui frammenti e ricostruisce la relazione globale da cui sono stati generati i frammenti – I frammenti sono stati generati con regole di frammentazione che sono query relazionali • • Supponiamo che i frammenti non siano replicati Approccio naif per localizzare i dati distribuiti – La query (che opera su relazioni globali) viene trasformata sostituendo tutte le occorrenze di ogni relazione globale con il suo programma di localizzazione • • La query ottenuta (query generica) è inefficiente e necessita di ristrutturazioni e semplificazioni Possiamo considerare alcune regole di riduzione per ottimizzare la query generica da applicare a seconda di come è stata ottenuta la frammentazione F.Cesarini - Basi Dati Distribuite esecuzione query 11 Framm. Orizz. Primaria – riduzione con sel. (1) • • • • Sia R frammentata in R1, … Rw con Ri = σpi R Programma di localizzazione: R1 ∪ R2 … ∪ Rw Inserendo il programma di localizzazione nell’albero di una query che effettua una selezione ( ad es. con un predicato pi ) si possono avere dei sottoalberi che generano relazioni vuote, questi vanno eliminati Regola 1 – σpi Rj = ∅ se ∀x in R : ¬ (pi (x) ∧ pj (x)) • x indica una tupla Esempio: si consideri la frammentazione EMP1 = σEno ≤ ‘E3’ EMP EMP2 = σ’E3’ < Eno ≤ ‘E6 EMP EMP3 = σEno > ‘E6’ EMP • Il programma di localizzazione è EMP = EMP1 ∪ EMP2 ∪ EMP3 F.Cesarini - Basi Dati Distribuite esecuzione query 12 6 Framm. Orizz. Primaria – riduzione con sel. (2) Query: query globale SELECT * FROM EMP WHERE Eno = ‘E5’ query generica query ridotta σEno = ‘E5’ σEno = ‘E5’ σEno = ‘E5’ ∪ EMP EMP1 F.Cesarini - Basi Dati Distribuite EMP2 EMP3 EMP2 esecuzione query 13 Framm. Orizz. Primaria – riduzione con join (1) • • La ristrutturazione e semplificazione dell’albero nel caso ci siano join può avvenire utilizzando la regola distributiva dei join ed unione, e eliminando i join inutili Proprietà distributiva – (R1 ∪ R2 ) • S = ( R1 • S ) ∪ ( R2 • S) • Regola 2 ( supponendo Ri e Rj definiti in accordo a pi e pj sullo stesso attributo) • Invece del calcolo di un join possiamo avere due calcoli paralleli di join parziali La query generica può essere migliore quando i join parziali sono molti (caso peggiore: ogni frammento di una relazione deve essere messo in join con ogni frammento dell’altra) La query ridotta può essere migliore se il numero di join parziali è piccolo e possono essere eseguiti in parallelo – Ri • Rj = ∅ se ∀x in Ri , ∀y in Rj : ¬(pi (x) ∧ pj (y)) • • F.Cesarini - Basi Dati Distribuite esecuzione query 14 7 Framm. Orizz. Primaria – riduzione con join (2) • • • • Esempio: EMP(Eno, Ename, Title) EMP sia frammentata in – EMP1 = σEno ≤ ‘E3’ EMP – EMP2 = σ’E3’ < Eno ≤ ‘E6 EMP – EMP3 = σEno > ‘E6’ EMP ASG sia frammentata secondo – ASG1 = σEno ≤ ‘E3’ ASG – ASG2 = σEno > ‘E3’ ASG Si abbia la query SELECT * FROM EMP, ASG WHERE EMP.Eno = ASG.Eno F.Cesarini - Basi Dati Distribuite ASG(Eno, Jno, Dur) esecuzione query 15 Query generica / Query ridotta non vengono considerati i join che danno risultato vuoto • E no ∪ EMP1 EMP2 ∪ EMP3 ASG1 ASG2 ∪ • EMP1 • E no ASG1 F.Cesarini - Basi Dati Distribuite EMP2 • E no ASG2 EMP3 esecuzione query E no ASG2 16 8 Frammentazione verticale (1) • • Per come si effettua una frammentazione verticale, il programma di localizzazione effettua un join Esempio: sia EMP frammentata secondo – EMP1 = πEno, Ename EMP – EMP2 = πEno, Title EMP • Il programma di localizzazione è – EMP = EMP1 • • • • Eno EMP2 Una query può essere ridotta esaminando se ci sono relazioni intermedie inutili ⊆{A1, … An} Sia R(A1, A2, … An) e Ri = πA’ R con A’⊆ Regola 3 – πD,K Ri è inutile se D non è contenuto in A’ (K è la chiave di R) F.Cesarini - Basi Dati Distribuite esecuzione query 17 Frammentazione verticale (2) • • Si consideri la query SELECT Ename FROM EMP Si può osservare che la proiezione su EMP2 è inutile perché Ename non è fra gli attributi di EMP2 query generica πEname • EMP1 F.Cesarini - Basi Dati Distribuite query ridotta πEname E no EMP1 EMP2 esecuzione query 18 9 Frammentazione derivata (1) • Supponiamo che – S sia frammentata in accordo a un predicato di selezione – R sia in relazione di join con S in modo tale che ad ogni tupla di R corrisponda una sola tupla di S, e che ad una tupla di S corrispondano più tuple di R – R sia frammentata in accordo con la frammentazione di S – I frammenti di R siano allocati nello stesso sito dei frammenti corrispondenti di S • La frammentazione derivata si ottiene con i semijoin, il programma di localizzazione si basa sull’unione, quindi si possono fare controlli analoghi a quelli visti prima F.Cesarini - Basi Dati Distribuite esecuzione query 19 Frammentazione derivata (2) • Esempio: – – – – • EMP1 = σTitle = ‘programmatore’ EMP EMP2 = σTitle ≠ ‘programmatore’ EMP ASG1 = ASG • Eno EMP1 ASG2 = ASG • Eno EMP2 Programma di localizzazione: – ASG = ASG1 ∪ ASG2 • Query: SELECT * FROM EMP, ASG WHERE ASG.Eno = EMP.Eno AND Title = ‘Mech.Eng.’ • Trasformazioni – Abbassando le selezioni, il predicato è in conflitto con quello che ha generato EMP1 , quindi EMP1 viene rimosso – Proprietà distributiva del join sull’unione – Il sottoalbero sinistro è un join che produce una relazione vuota per come sono stati costruiti i frammenti F.Cesarini - Basi Dati Distribuite esecuzione query 20 10 Frammentazione derivata (3) query generica – query con selezioni abbassate • σTitle = ‘Mech.Eng.’ ∪ ASG1 E no ∪ ASG2 EMP1 • E no ∪ ASG1 EMP2 σTitle = ‘Mech.Eng.’ ASG2 EMP2 F.Cesarini - Basi Dati Distribuite esecuzione query 21 Frammentazione derivata (4) query con selezioni abbassate – query con unione alzata • ∪ ASG1 E no σTitle = ‘Mech.Eng.’ ASG2 EMP2 ∪ • • E no σTitle = ‘Mech.Eng.’ ASG1 F.Cesarini - Basi Dati Distribuite EMP2 E no σTitle = ‘Mech.Eng.’ ASG2 esecuzione query EMP2 22 11 Frammentazione derivata (5) query con unione alzata – query ridotta ∪ • • E no E no σTitle = ‘Mech.Eng.’ ASG1 σTitle = ‘Mech.Eng.’ EMP2 ASG2 • EMP2 E no σTitle = ‘Mech.Eng.’ ASG2 F.Cesarini - Basi Dati Distribuite EMP2 esecuzione query 23 Frammentazione ibrida • Esempio πEno, Ename EMP) – EMP1 = σEno ≤ ‘E4’ (π πEno, Ename EMP) – EMP2 = σEno > ‘E4’ (π – EMP3 = πEno, Title EMP • Programma di localizzazione – EMP = (EMP1 ∪ EMP2) • • Eno EMP3 Query – SELECT Ename FROM EMP WHERE Eno = ‘E5’ • Trasformazioni – La selezione viene spinte in basso eliminando EMP1 – La proiezione viene spinta in basso eliminando EMP3 F.Cesarini - Basi Dati Distribuite esecuzione query 24 12 Esempio di frammentazione ibrida query generica – query ridotta πEname πEname σEno = ‘E5’ • σEno = ‘E5’ E no EMP2 ∪ EMP1 F.Cesarini - Basi Dati Distribuite EMP2 EMP3 esecuzione query 25 Frammentazione ibrida: regole generali • Per la frammentazione ibrida si possono combinare le regole viste per la frammentazione orizzontale primaria, frammentazione verticale e frammentazione orizzontale derivata – Rimuovere le relazioni vuote generate in contraddizione con le selezioni usate per generare i frammenti orizzontali – Rimuovere le relazioni che non servono, generate da proiezioni su frammenti verticali – Distribuire i join sulle unioni per isolare e rimuovere i join inutili F.Cesarini - Basi Dati Distribuite esecuzione query 26 13 OTTIMIZZAZIONE DI QUERY DISTRIBUITE • • • • • • L’obbiettivo è trovare l’ordinamento ottimo delle operazioni da eseguire Trovare la strategia ottima per l’esecuzione di una query è un problema NP-hard nel numero di relazioni [ozvald99] L’obbiettivo è quindi trovare una strategia vicina alla ottima, e comunque evitare cattive strategie La strategia prodotta dall’ottimizzatore viene chiamata strategia ottima (anche se non lo è strettamente) Output dell’ottimizzatore: query execution plan con query algebriche su frammenti e operazioni di comunicazione Verranno tipicamente considerate query con join, selezioni e proiezioni F.Cesarini - Basi Dati Distribuite esecuzione query 27 Ottimizzazione query • Viene prodotto un piano di esecuzione della query che rappresenta una strategia di esecuzione della query stessa. • Il piano scelto minimizza una funzione costo obbiettivo • L’ottimizzatore consiste di tre componenti – Spazio di ricerca: è l’insieme di tutti i piani di esecuzione che possono essere associati alla query; i piani sono equivalenti nel senso che producono lo stesso risultato ma sono diversi per l’ordine delle operazioni e/o per la loro implementazione – Modello di costo: predice il costo di un piano di esecuzione – Strategia di ricerca: esplora lo spazio di ricerca e sceglie il piano migliore sulla base del modello di costo F.Cesarini - Basi Dati Distribuite esecuzione query 28 14 Modello di costo • Il modello di costo si basa su funzioni di costo che devono prendere in considerazione sia le operazioni effettuate sia gli operandi a cui vengono applicate (relazioni di base o loro parti e risultati intermedi) • Abbiamo quindi – Funzione di costo – Statistiche sul data base (caratteristiche delle relazioni di base) – Caratteristiche dei risultati intermedi F.Cesarini - Basi Dati Distribuite esecuzione query 29 Modello di costo / funzione di costo • • • Tipiche funzioni di costo considerate sono il tempo totale di esecuzione e il tempo di risposta Il tempo totale di esecuzione, come dice il termine, somma tutti i tempi di esecuzione di tutte le operazioni effettuate Il tempo di risposta invece può tener conto delle operazioni effettuate in parallelo F.Cesarini - Basi Dati Distribuite esecuzione query 30 15 Modello di costo Funzione di costo: tempo totale TEMPO TOTALE DI ESECUZIONE • Il tempo totale è la somma di tutti i tempi componenti – Tempo di elaborazione locale • Tempo di CPU per l’esecuzione delle istruzioni • Tempo di I/O – Tempo di comunicazione • Tempo fisso per iniziare la trasmissione di un messaggio • Tempo per la trasmissione dei dati Total_time = TCPU × #instr + TI/O × # I/Os + Tmsg × #msgs + TTR × #bytes • Il tempo di comunicazione può essere considerato dominante nelle Wide Area Networks (Internet), non nelle LAN, e comunque deve essere fatto riferimento alla tecnologia attuale F.Cesarini - Basi Dati Distribuite esecuzione query 31 Modello di costo Funzione di costo: tempo di risposta TEMPO DI RISPOSTA • È il tempo trascorso fra l’inizio e il completamento della query • Devono essere considerate le elaborazioni locali e le comunicazioni effettuate in parallelo Response_time = TCPU × seq_#instr + TI/O × seq_# I/Os + Tmsg × seq_#msgs + TTR × seq_#bytes Dove seq_#x indica il massimo numero di x che devono essere effettuati in sequenza per eseguire la query F.Cesarini - Basi Dati Distribuite esecuzione query 32 16 Modello di costo / Statistiche sul database • • • • • • • Elenchiamo i dati statistici più interessanti per una relazione frammentata (se la relazione non è frammentata è immediato ottenere le statistiche equivalenti) Sia R(A1, … An) frammentata in R1, … Rr ∀ Ai , length( Ai ): lunghezza in byte dell’attributo ∀ Ai in Rj, card( πAi ( Rj )): numero di valori distinti di Ai in Rj ∀ Ai , card( dom (Ai )): numero di valori distinti del dominio di Ai ∀ Ai definito su un insieme di valori ordinati, min( dom (Ai )) max( dom (Ai )) ∀ Rj , card( Rj ): numero di tuple in Rj F.Cesarini - Basi Dati Distribuite esecuzione query 33 Modello di costo Cardinalità dei risultati intermedi (1) • • • Supponiamo che i valori di un attributo in una relazione abbiano distribuzione uniforme (controesempio: città di residenza per gli studenti iscritti all’Ateneo di Firenze) Supponiamo che gli attributi siano indipendenti Indichiamo con SFop il fattore di selettività (selectivity factor) della operazione op, ad esempio per la selezione e il join abbiamo SFS(F) = card (σ σF (R)) / card(R) SFJ (R, S) = card (R • S) / (card(R) × card(S)) F.Cesarini - Basi Dati Distribuite esecuzione query 34 17 Modello di costo Cardinalità dei risultati intermedi (2) SELEZIONE (p(Ai) indica un predicato su Ai) σF (R)) = SFS(F) × card(R) card (σ πA(R)) SFS(A=val) = 1 / card(π SFS(A>val) = (max(A)-val) / (max(A)-min(A)) SFS(A<val) = (val-min(A)) / (max(A)-min(A)) SFS(p(Ai) ∧ p(Aj)) = SFS(p(Ai)) × SFS(p(Aj)) SFS(p(Ai) ∨ p(Aj)) = SFS(p(Ai)) + SFS(p(Aj)) – (SFS(p(Ai)) × SFS(p(Aj))) ∈{values}) = SFS(A=val) × card({values}) SFS(A∈ F.Cesarini - Basi Dati Distribuite esecuzione query 35 Modello di costo Cardinalità dei risultati intermedi (3) PROIEZIONE – È di difficile valutazione; nel caso che gli attributi di proiezione includano la chiave si ha banalmente πA(R)) = card(R) card(π PRODOTTO CARTESIANO card(R × S) = card(R) × card(S) JOIN – Il limite superiore è la cardinalità del prodotto cartesiano • Distributed INGRES usa questo valore (pessimistico) • R* lo divide per una costante – Nel caso in cui si abbia un equijoin fra la chiave A di R e una chiave straniera B di S (riferita a A.R) card(R • A=B S) = card(S) F.Cesarini - Basi Dati Distribuite esecuzione query 36 18 Spazio di ricerca – Strategia di ricerca • Un piano di esecuzione è descritto da un operator tree, arricchito della specifica dell’algoritmo usato per ogni operazione – Lo spazio di ricerca è quindi costituito dall’insieme di tutti i possibili operator tree • Euristica per limitare la dimensione dello spazio di ricerca: – Evitare i prodotti cartesiani se possibile – Fare le selezioni e le proiezioni quando viene fatto accesso alle relazioni di base (si fa un filtro sulla lettura) F.Cesarini - Basi Dati Distribuite esecuzione query 37 Esempio di euristica dei tre alberi equivalenti, il terzo viene scartato • • EMP • Pno E no ASG F.Cesarini - Basi Dati Distribuite • PROJ ASG • E no Pno EMP PROJ esecuzione query E no,Pno × PROJ ASG EMP 38 19 Ott. query / centralizzato vs distribuito • • • • • I tre moduli di un ottimizzatore sono presenti sia in ambiente centralizzato che distribuito I dettagli dell’ambiente sono catturati dallo spazio di ricerca e dal modello di costo Conoscere le tecniche di ottimizzazione centralizzata è un prerequisito per l’ottimizzazione distribuita per due motivi – Una query distribuita è trasformata in query locali elaborate in modo centralizzato – Le tecniche di ottimizzazione distribuita sono spesso estensioni delle tecniche per i sistemi centralizzati L’ottimizzazione centralizzata è un problema più semplice della distribuita poiché mancano i costi di comunicazione La trattazione seguente si ispira all’approccio seguito dal System R F.Cesarini - Basi Dati Distribuite esecuzione query 39 Ottimizzazione centralizzata (System R) • Viene effettuata una ottimizzazione statica della query basata su una ricerca esaustiva dello spazio delle soluzioni – Gli alberi candidati sono ottenuti permutando l’ordine dei join, sulla base delle regole associativa e commutativa • il numero degli alberi costruiti è ridotto utilizzando tecniche di programmazione dinamica: quando due join sono equivalenti per la commutatività, viene mantenuto quello di costo minore – Viene associato un costo ad ogni albero candidato • Il modello di costo considera sia il costo di CPU che di I/O • Per la valutazione del costo della maggior parte degli operatori è necessario sia conoscere le statistiche del database (p.es. cardinalità delle relazioni di base) sia stimare quella dei risultati intermedi (cfr. fattore di selettività degli operatori) – Viene tenuto l’albero con costo minimo F.Cesarini - Basi Dati Distribuite esecuzione query 40 20 Ottimizzazione centralizzata (System R) modello di costo • Viene considerata una formula di costo per ciascuna operazione di basso livello, p.es. – Scansione sequenziale – Selezione con predicato di range tramite un B-tree • Le formule di costo si basano sulla cardinalità degli operandi (tranne il match esatto) – Statistiche sul database – Stima dei risultati intermedi F.Cesarini - Basi Dati Distribuite esecuzione query 41 Ottimizzazione centralizzata (System R) algoritmi di join • • • In un join fra R e S in cui viene prima letta R e poi trovate le tuple di S che si accordano con quelle di R, R viene detta la relazione esterna e S la relazione interna Algoritmo nested loops: per ciascuna tupla della relazione esterna, vengono trovate le tuple della interna che soddisfano il predicato di join – Se esiste un indice sulla relazione interna, viene utilizzato – In assenza di indice l’algoritmo ha costo #pagR × #pagS Algoritmo merge join: viene fatto il merge di due relazioni ordinate sull’attributo di join – Indici sull’attributo di join possono essere usati come cammino di accesso – Il costo dell’equijoin su relazioni ordinate è #pag R + #pagS – Una relazione di n pagine può essere ordinata con un costo n log n – Può convenire effettuare l’ordinamento se una relazione è grande F.Cesarini - Basi Dati Distribuite esecuzione query 42 21 Ottimizzazione centralizzata (System R) algoritmo di ottimizzazione • • • Consideriamo “select-project-join” query Per ciascuna relazione presente nella query viene scelto il metodo di accesso migliore ad essa (considerata singolarmente) Vengono considerate tutte le possibili permutazioni dei join – Prima vengono considerati i join (a due) di ogni relazione con le altre (scegliendo per ogni coppia l’algoritmo migliore), inoltre per la prima relazione della coppia viene usato il metodo di accesso determinato nel passo precedente – Di ogni coppia viene fatto il join con una terza relazione, e così via • • Viene scelta la strategia a costo minore In realtà ad ogni passo se possibile viene scartata qualche permutazione (il numero delle strategie esaminate è 2n invece che n!) – fra due join equivalenti per la commutatività viene mantenuto solo quello a costo minore – Vengono scartate le permutazioni con prodotti cartesiani F.Cesarini - Basi Dati Distribuite esecuzione query 43 Ottimizzazione centralizzata (System R) algoritmo di ottimizzazione System R optimization algorithm / simplified version [OZVAL99] input: QT – query tree with n relations output: output – the result of execution begin for each relation Ri ∈ QT do begin for each access path Apij to Ri do determine cost(Apij) end-for best_Api ← Apij with minimum cost end-for for each order (Ri1, Ri2, … Rin) with i=1, … n! do begin build strategy (… ((best APi1 • Ri2) • Ri3) • … Rin ) compute the cost of strategy end-for output ← strategy with minimum cost end F.Cesarini - Basi Dati Distribuite esecuzione query 44 22 Ottimizzazione centralizzata (System R) alg. ottimizzazione / esempio (1) • • • Query: si vuole il nome degli impiegati che lavorano al progetto CAD/CAM SELECT Emp.ename FROM Emp, Asg, Proj WHERE Emp.eno=Asg.eno AND Asg.jno=Proj.jno AND jname = “CAD/CAM” Supponiamo esistano i seguenti indici – Emp: – Asg: – Proj: • un indice su eno un indice su jno un indice su jno e un indice su jname Supponiamo che il primo passo dell’algoritmo scelga i cammini di accesso seguenti – Emp: scansione sequenziale (perché non c’è selezione su Emp) “ “ Asg – Asg: scansione sequenziale “ – Proj: indice su jname (perché c’è una selezione su Proj.jname) F.Cesarini - Basi Dati Distribuite esecuzione query 45 Ottimizzazione centralizzata (System R) alg. ottimizzazione / esempio (2) EMP • ASG pruned PROJ ASG EMP EMP × PROJ ASG • EMP ASG • PROJ pruned pruned (ASG • EMP) • PROJ F.Cesarini - Basi Dati Distribuite PROJ • ASG esecuzione query PROJ × EMP pruned (PROJ • ASG) • EMP 46 23 Ottimizzazione centralizzata (System R) alg. ottimizzazione / esempio (3) • • • • Il numero di ordinamenti considerato è inferiore a 3!, infatti le operazioni “ pruned” sono eliminate dinamicamente Il primo livello dell’albero indica il metodo di accesso migliore per una singola relazione Il secondo livello indica per ogni relazione il metodo di join migliore con ognuna delle altre Di questi alcuni sono “pruned” – I prodotti cartesiani possono essere evitati con altre strategie – Altri due join vengono tagliati perché si suppone che il join equivalente per la commutatività abbia costo minore • Al terzo livello abbiamo ora due possibilità: quello a destra ha costo minore perché ha un indice su Proj utile per la selezione e indici da utilizzare per i join F.Cesarini - Basi Dati Distribuite esecuzione query 47 Ottimizzazione centralizzata (System R) alg. ottimizzazione / esempio (4) • Query: si vuole il nome degli impiegati che lavorano al progetto CAD/CAM SELECT Emp.ename FROM Emp, Asg, Proj WHERE Emp.eno=Asg.eno AND Asg.jno=Proj.jno AND jname=“CAD/CAM” • Supponiamo esistano i seguenti indici: un indice su eno – Emp: un indice su jno – Asg: un indice su jno e un indice su jname – Proj: • Strategia scelta dall’ottimizzatore: 1 - Selezione su Proj usando l’indice su jname 2 - Join con Asg usando l’indice su jno 3 - Join con Emp usando l’indice su eno F.Cesarini - Basi Dati Distribuite esecuzione query 48 24 Ottimizzazione distribuita / R* • L’algoritmo di ottimizzazione distribuita di R* è una estensione di quello sviluppato per il System R • L’algoritmo usa un approccio compilativo con una analisi esaustiva di tutte le strategie • L’obbiettivo è minimizzare il costo totale (tempo di elaborazione locale con costo di I/O e CPU, dimensione dei messaggi, numero di messaggi) • Usa informazioni statistiche sui dati: cardinalità delle relazioni e numero di valori unici per attributo • La versione implementata di R* non supporta né frammentazione né replicazione F.Cesarini - Basi Dati Distribuite esecuzione query 49 Ottimizzazione distribuita / R* (2) • La compilazione della query è un task distribuito coordinato da un master site, dove è iniziata la query • L’ottimizzatore del master site prende le decisioni “inter -site”, come ad esempio la scelta dei siti per l’esecuzione e la modalità di trasferimento dati • Gli apprentice sites, dove risiedono le altre relazioni coinvolte nella query,prendono le altre decisioni locali, come l’ordine dei join su quel sito, e generano piani di accesso locali • Poiché l’elaborazione locale è ottimizzata dal DBMS locale, deve essere data opportuna attenzione alle operazioni binarie che coinvolgono dati su siti diversi F.Cesarini - Basi Dati Distribuite esecuzione query 50 25 Ottimizzazione distribuita / R* trasferimento dati Trasferimento dati da un sito all’altro • • • • • Ship-whole: tutta la relazione è inviata al sito del join ed è memorizzata in una relazione temporanea. Se l’algoritmo è il merge join, la relazione non è memorizzata e le tuple vengono elaborate in modo pipe line via via che arrivano Fetch-as-needed: la relazione esterna viene scandita sequenzialmente, per ciascuna tupla il valore di join viene inviato al sito della relazione interna che invia indietro le tuple che soddisfano il join. Ship-whole genera trasferimenti di dati più grandi ma meno messaggi del fetch-as needed Ship-whole è conveniente quando le relazioni sono piccole Fetch-as-needed è conveniente con relazioni grandi e buona selettività del join F.Cesarini - Basi Dati Distribuite esecuzione query 51 Ottimizzazione distribuita / R* strategie di join (1) Strategie di join R: relazione esterna, S: relazione interna, A: attributo di join LT: local processing time (I/O+CPU), CT: communication time il costo della produzione del risultato viene ignorato s: numero medio di tuple di S che si accordano con una tupla di R s = card( S • R) / card(R) Strategia 1: tutta la relazione esterna viene inviata al sito della relazione interna. Le tuple esterne possono essere messe in join con s via via che arrivano total_cost = F.Cesarini - Basi Dati Distribuite LT (retrieve card(R) tuple di R) + CT (size(R)) + LT (retrieve s tuple da S) × card(R) esecuzione query 52 26 Ottimizzazione distribuita / R* strategie di join (2) Strategia 2: l’intera relazione interna viene inviata al sito della relazione esterna. Le tuple interne devono essere memorizzate in una relazione temporanea T total_cost = LT (retrieve card(S) tuple da S) + CT (size(S)) + LT (store card(S) tuple in T) + LT (retrieve card(R) tuple da R) + LT (retrieve s tuple da T) × card(R) Strategia 3: recupero delle tuple della relazione interna come necessario per ciascuna tupla della esterna. Per ciascuna tupla di R, il valore dell’attributo di join viene inviato al sito di S che invia indietro le s tuple di S che si accordano con esso. total_cost = F.Cesarini - Basi Dati Distribuite LT (retrieve card(R) tuple da R) + CT (length(A)) × card(R) + LT (retrieve s tuple da S) × card(R) + CT (s × length(S)) × card(R) esecuzione query 53 Ottimizzazione distribuita / R* strategie di join (3) Strategia 4: spostare ambedue le relazioni su un terzo sito e là calcolare il join. Prima viene spostata la relazione interna sul terzo sito e memorizzata in T. Poi viene spostata la relazione esterna e viene fatto il join via via che le tuple arrivano total_cost = F.Cesarini - Basi Dati Distribuite LT (retrieve card(S) tuple da S) + CT (size(S)) + LT (store card(S) tuple in T) + LT (retrieve card(R) tuple da R) + CT (size(R)) + LT (retrieve s tuple da T) × card(R) esecuzione query 54 27 Ottimizzazione distribuita / R* - esempio • • Join di PROJ (relazione esterna) con ASG (relazione interna) sull’attributo Jno PROJ e ASG sono memorizzate su siti diversi ASG ha un indice su Jno Le quattro strategie sono: 1 – Trasferimento di tutta PROJ al sito di ASG 2 – Trasferimento di tutta ASG al sito di PROJ 3 – Recupero delle tuple di ASG per ciascuna tupla di PROJ 4 – Spostamento di ASG e PROJ su un terzo sito • • • La 4 viene eliminata perché successivamente non c’è un terzo join Se size(PROJ) è molto più grande di size(ASG), la 2 minimizza il costo di comunicazione e può essere la migliore se il tempo di elaborazione locale non è troppo alto rispetto a 1 e 3. Si noti il tempo di elaborazione locale di 1 e 3 è forse migliore di 2 perché può sfruttare l’indice. Altrimenti la scelta è fra 1 e 3. Il costo locale è identico. Se PROJ è grande e solo poche tuple di ASG si accordano, la 3 ha costo di comunicazione più basso; altrimenti se PROJ è piccola e molte tuple di ASG vanno in join è migliore la 1. F.Cesarini - Basi Dati Distribuite esecuzione query 55 Ottimizzazione distribuita / semijoin • • • L’ottimizzazione di R* fa parte dei metodi che non prendono in considerazione i semi-join Un’altra categoria di metodi si basa invece sull’utilizzo dei semijoin R • AS ⇔ (R • A S) • A S ⇔ R • A ( S • A R) ⇔ ( R• AS) • A ( S • A R) La prima di queste espressioni può essere calcolata come segue: 1 - πA(S) → sito 1 2 – calcolo sul sito 1 di R’ = R • 3 – R’ → sito 2 4 – calcolo sul sito 2 di R’ • • • A A S S Si confronta con il calcolo del join effettuato trasferendo tutta R Il tempo di trasmissione per i semijoin è minore se size ( πA(S)) + size ( R • F.Cesarini - Basi Dati Distribuite A S) < size (R) esecuzione query 56 28 Esempio [2] SELECT Nome, Direttore FROM IMP, DIP WHERE DIP.Sigla=IMP.Dipart AND IMP.Qual=‘Analista’ AND DIP.Loc=‘Roma’ πDipart IMP) = card(π πSigla DIP) = 40 card(IMP) = 2000 card(DIP) = 40 card(π πQual IMP) = card(π πLoc DIP) = 10 length(IMP) = 50 card(π length(Dipart) = length(Sigla) = 5 card(IMP’ = σQual = ‘Analista’ IMP) = 200 card(DIP’ = σLoc = ‘Roma’ DIP) = 4 Costo di trasmissione CT = c0 + c1 × qd dove qd indica la quantità di dati trasferiti, c0 e c1 dipendono dalla rete • Strategia banale – IMP’ viene trasferito in ND CT = c0 + c1 × (card(IMP’) × length(IMP)) = c0 + c1 × 10000 F.Cesarini - Basi Dati Distribuite esecuzione query 57 Esempio [2] • Strategia con semijoin – Passo 1 esecuzione di πSigla DIP’ nel nodo ND con costo trasmissione nullo – Passo 2 trasmissione di πSigla DIP’ ad NI con costo costo = c0 + c1 × ( card(π πSigla DIP’) × length(Sigla)) = c0 + c1 × 20 – Passo 3 esecuzione di IMP’ • Dipart= Sigla πSigla DIP’ in NI (costo trasm nullo) – Passo 4 trasferimento del risultato a ND Deve essere stimata la card del semijoin. Sia fSJ la frazione di tuple di R che partecipano alla giunzione con S fSJ ( R • X_R = X_S S) = card( πX_S S) / card (π πX_R R) = 4/40 =0.1 costo = c0 + c1 × ( 0.1 × card(IMP’) × length(IMP)) = c0 + c1 × 1000 F.Cesarini - Basi Dati Distribuite esecuzione query 58 29 Esempio [2] • Strategia con semijoin – Passo 5 esecuzione del join in ND con costo di trasmissione nullo Costo complessivo della strategia con semijoin C = 2c0 + c1 × 1020 se c0 << c1 allora questo costo è inferiore a quello della strategia banale F.Cesarini - Basi Dati Distribuite esecuzione query 59 30