UNIVERSITÀ DEGLI STUDI
DI 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
Daniel Stoilov
Tesi di Laurea
Relatore:
Prof. Riccardo Martoglia
Anno Accademico 2007/2008
Query Optimization
• 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
Obiettivo della Tesi
• 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
Progetto e Sviluppo di un
Query Optimizer
• Analisi del Problema
• 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
Ottimizzazione di query
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
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
Ottimizzazione di query
Verranno considerati e gestiti indici B+tree di due tipi:
clustered
• Indice non-clustered
- comporta
il riordinamento
dell'intera
tabella
intabella
- contengono
i riferimenti
alle righe
della
base alvalorizzata
campo presente
nell'indice.
L'indice
con una
determinata
n-plaèdipiù
valori in
performante
dal puntodei
di vista
richieste ma
corrispondenza
campidelle
indicizzati
è il più pesante durante l'aggiornamento e
l'inserimento
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
Progetto e Sviluppo di un
Query Optimizer
• Analisi del Problema
• Progetto
• Implementazione
Progetto
Fasi della progettazione:
• Raccolta dei requisiti funzionali
• Analisi dello scenario: ottimizzatore di query
• Individuazione dei casi d'uso
• Realizzazione degli activity diagram
Scenario
ottimizzatore
di
query
Visione globale
del ottimizzatore
di query
L’utente specifica
le dimensioni del
In caso
di inserimento
form,
Inserimento
di
sbagliato,
l’utente
ha
aggiungendo
una
query
nel
la possibilità
delle
righe di
form
appena
resettare il modulo
creato
Dopo aver confermato
l'inserimento sarà possibile
dati
specificare i datiAnnulla
necessari
per il calcolo delinseriti
costo
Activity Diagram:
Inserimento Querry
Diagramma delle attività per
la funzione di inserimento di
una query analizzata in
dettaglio
Activity Diagram:
Inserimento Query
Diagramma delle attività per
la funzione di calcolo del
costo di accesso analizzata in
dettaglio
Progetto e Sviluppo di un
Query Optimizer
• Analisi del Problema
• Progetto
• Implementazione
Studio degli script
• AggiungiRiga.php: richiede la specifica delle righe del
form.


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.
Studio degli script
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.


StampaRisultati.php: visualizza i risultati del calcolo.
Query optimizer: Aggiungi riga
• Query optimizer: specifica del numero di righe
L'utente può
richiedere
facilmente
ulteriori righe.
Query optimizer: Aggiungi riga
• Query optimizer: specifica del numero di righe
Controllo sul
campo
obbligatorio:
Aggiungi riga
Query optimizer: inserimento
query
Query
inserita
Menu
a tendina
Inserimento
Controlli
suidi
correttamente
una query
filtro
campi
AND,
obbligatori:
OR,
Select, From,
BETWEEN
Where
Query optimizer: inserimento
From
Inserimento valori di NT e NB per ogni tabella
Visualizzazione della query inserita
Inserimento
dati indici
Specifica
di NK e NF
Specifica del tipo
Possibilità di
annullare
il form
La sequenza più conveniente è DIP => IMP
Questo script effettua
i calcoli e visualizza
i risultati
Query
optimizer:
Stampa
risultati
Visualizzazione del
costo di Join per la
IMP=>DIP
Sequenza DIP
=> IMP
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
Viene mostrata la
sequenza di accesso
Visualizzazione del
costo della
scansione
sequenziale
Visualizzazione del
costo di accesso
con indice clustered
Obiettivi raggiunti
creare un’applicazione web in grado di eseguire dei
calcoli per il costo di accesso a interrogazioni

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

Sviluppi futuri
creazione di script PHP per estendere i calcoli di join a più
di tre tabelle

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
