250 likes | 521 Views
Daniel Stoilov Tesi di Laurea. U NIVERSITÀ DEGLI STUDI DI M ODENA E R EGGIO E MILIA. Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Scienze dell’Informazione.
E N D
Daniel Stoilov Tesi di Laurea UNIVERSITÀ DEGLI STUDIDI MODENA E REGGIO EMILIA Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Scienze dell’Informazione Progetto e Sviluppo di un'Applicazione Web per il Calcolo e la Visualizzazione di Piani di Accesso a Basi di Dati Relatore: Prof. Riccardo Martoglia Anno Accademico 2007/2008
Scopo di un DB Optimizer è di determinare mediante stime la migliore strategia di accesso per l’esecuzione di un’interrogazione SQL Tali moduli effettuano delle stime sulla base degli indici disponibili utili alla soluzioni dell’interrogazione La creazione di tutti e soli gli indici utili all’esecuzione delle interrogazioni spetta al progettista della base di dati, che ha anche la necessità di documentare le proprie scelte Query Optimization
Necessità di avere uno strumento didattico in grado di facilitare il compito del progettista e di chi affronta lo studio di questi argomenti Scopo di questa tesi è la progettazione e realizzazione di uno strumento in grado di operare in un ambiente web dinamico eseguire automaticamente il parsing della query valutare i piani di accesso ottimali mediante un opportuno modello di costo suggerire i migliori indici e piani di accesso produrre un resoconto passo-passo, chiaro e dettagliato, dei calcoli effettuati Obiettivo della Tesi
Analisi del Problema Progetto e Sviluppo di unQuery Optimizer • Progetto • Implementazione
Analisi del problema • Lo scopo del processo di ottimizzazione della query è produrre un "piano di esecuzione" il più efficiente possibile. • Un "ottimizzatore” può produrre un piano di esecuzione "ottimale" per la maggioranza delle query. • Il query optimizer realizzato dovrà essere in grado di • effettuare i calcoli per i casi di interrogazioni più comuni • essere di immediato e facile utilizzo, anche e soprattutto in un’ottica didattica
L'efficienza di una applicazione dipende dall'efficienza del sottostante database. L'efficenza del database dipende dall'efficenza delle query. Come ottimizzare una query? - verificare gli indici utili per migliorare l'efficienza di accesso ai dati Ottimizzazione di query Un indice è utile per una query solo se il costo di accesso con l’indice è minore del costo dell’accesso sequenziale cioè minore del numero di pagine per file
Verranno considerati e gestiti indici B+tree di due tipi: Ottimizzazione di query • Indice clustered • - comporta il riordinamento dell'intera tabella in • base al campo presente nell'indice. L'indice è più • performante dal punto di vista delle richieste ma • è il più pesante durante l'aggiornamento e • l'inserimento • Indice non-clustered • - contengono i riferimenti alle righe della tabella • valorizzata con una determinata n-pla di valori in • corrispondenza dei campi indicizzati
Problemi da risolvere • Analizzare le query SQL • Valutare tutti i piani di accesso più opportuni secondo un modello di costo • Creare un'interfacca grafica per aiutare i progettisti e chi intende studiare questi argomenti • Produrre una spiegazione dettagliata passo passo in output, analoga a quella che si trova nelle soluzioni dei relativi esercizi sui libri di testo
Scelte tecnologiche Applicazione dinamica Web-based • Web server: Apache • Tecnologie e strumenti: - HTML - CSS - PHP
Analisi del Problema Progetto e Sviluppo di unQuery Optimizer • Progetto • Implementazione
Fasi della progettazione: Progetto • Raccolta dei requisiti funzionali • Analisi dello scenario: ottimizzatore di query • Individuazione dei casi d'uso • Realizzazione degli activity diagram
Scenario ottimizzatore di query L’utente specifica le dimensioni del form, aggiungendo delle righe Visione globale del ottimizzatore di query In caso di inserimento sbagliato, l’utente ha la possibilità di resettare il modulo Inserimento di una query nel form appena creato Dopo aver confermato l'inserimento sarà possibile specificare i dati necessari per il calcolo del costo Annulla dati inseriti
Diagramma delle attività per la funzione di inserimento di una query analizzata in dettaglio Activity Diagram:Inserimento Querry
Activity Diagram:Inserimento Query Diagramma delle attività per la funzione di calcolo del costo di accesso analizzata in dettaglio
Analisi del Problema Progetto e Sviluppo di unQuery Optimizer • Progetto • Implementazione
AggiungiRiga.php: richiede la specifica delle righe del form. Studio degli script • InserimentoQuery.php: richiede l'inserimento di una query dall'utente. Controlla il corretto inserimento e in caso di sintassi sbagliata redireziona l’utente alla pagina AggiungiRiga.php. • InserimentoFrom.php: righiede la specifica dei campi NT (numero di tuple del file) e NB (numero di pagine del file) per ogni tabella. Controlla se i dati richiesti sono specificati e in caso contrario da messaggio di errore.
InserimentoCalcolo.php: permette di selezionare per ogni attributo il valore di NK (numero di valori distinti della chiava), NF (numero di foglie dell'indice) ed il tipo di indice utilizzato: clustered, unclustered ordinato o unclustered disordinato. Controlla se i dati sono inseriti, controlla se l'indice clustered è utilizzato al più una volta per relazione. Studio degli script • StampaRisultati.php: visualizza i risultati del calcolo.
Query optimizer: specifica del numero di righe Query optimizer: Aggiungi riga L'utente può richiedere facilmente ulteriori righe.
Query optimizer: specifica del numero di righe Query optimizer: Aggiungi riga Controllo sul campo obbligatorio: Aggiungi riga
Inserimento di una query Query optimizer: inserimento query Query inserita correttamente Menu a tendina filtro AND, OR, BETWEEN Controlli sui campi obbligatori: Select, From, Where
Inserimento valori di NT e NB per ogni tabella Query optimizer: inserimento From Visualizzazione della query inserita
Inserimentodati indici Specifica di NK e NF Specifica del tipo Possibilità di annullare il form
Questo script effettua i calcoli e visualizza i risultati La sequenza più conveniente è DIP => IMP Visualizzazione del costo di Join per la Sequenza IMP=>DIP Visualizzazione del costo di Join per la Sequenza DIP => IMP Viene mostrata la sequenza di accesso Query optimizer: Stampa risultati Visualizzazione del costo della scansione sequenziale Visualizzazione del costo di accesso con indice clustered Con l’accesso a IMP si ottengono Einp.nome=50 tuple che soddisfano imp.nome=“Rossi” quindi per 50 volte si accede a DIP per il predicato imp.qual=dip.qual
creare un’applicazione web in grado di eseguire dei calcoli per il costo di accesso a interrogazioni Obiettivi raggiunti • sfruttare un modello di costo per prendere decisioni sull’ordinamento delle relazioni e quali indici costruire • fornire uno strumento didattico in grado di aiutare chi intende studiare o capire meglio questi argomenti, grazie alla semplice interfaccia grafica e alla spiegazione dettagliata passo passo fornita in output, analoga a quella che si trova nelle soluzioni dei relativi esercizi sui libri di testo
creazione di script PHP per estendere i calcoli di join a più di tre tabelle Sviluppi futuri • specifica in dettaglio dei valori degli attributi nei casi di operatori di minore o maggiore • estensione degli script al fine di ottimizzare anche operazioni di modifica