Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
delle interrogazioni
Prof. Matteo Golfarelli
Alma Mater Studiorum - Universit di Bologna
Per approfondimenti:
Ciaccia, Maio. Lezioni di basi di dati: pp 377-434
Sistemi di basi di dati-Complementi R.A. Elmasri and S.B. Navathe
ORACLE 8i Oracle8i Designing and Tuning for Performance
Introduzione
Introduzione
I compiti dellamministratore
poter
Fasi dellesecuzione
Interrogazione SQL
Scansione, parsing
e validazione
Albero di esecuzione
Ottimizzatoredelle
interrogazioni
Piano di esecuzione
Generatore del
codice
Codice procedurale eseguibile
Processore
runtime
Risultato
dellinterrogazione
5
Traduzione dellinterrogazione
Uno DB di esempio
IMP(I_SSN,I_Nome,I_Cognome,I_DataN,I_Indirizzo,I_Sesso,
I_Stipendio,I_Super:IMP,I_ND:DIP)
DIP(D_Numero,D_Nome,D_SSNDir:IMP,D_DataInizio)
SEDIDIP(S_NumeroDip:DIP,S_Sede)
PROG(P_Numero,P_Nome,P_Sede,P_Dipartimento:DIP)
LAVORASU(L_SSNImp:IMP,L_Prog:PROG)
PERSONA_A_CARICO(C_SSN:IMP,C_NomeP,C_Sesso,C_DataN,C_Parentela)
Traduzione dellinterrogazione
I_cognome,I_nome(I_Stipendio>c(IMP))
select I
I_Cognome,
Cognome I
I_Nome
Nome
from IMP
where I_Stipendio >(select MAX(I_Stipendio)
from IMP
where I_ND = 5);
c=
c=
MAX(I_Stipendio)(I_ND=5(IMP))
))
Lalbero di esecuzione
estesa
select P_Numero,P_Dipartimento,I_Cognome,I_Indirizzo,I_DataN
from
PROG,DIP,IMP
where P_Dipartimento=D_Numero AND D_SSNDir=I.SSN AND
P_Sede=Cesena
P_Numero,P_Dipertimento,I_Cognome,
I_Indirizzo,I_DataN
ZY
P_Dipartimento=D_Numero
(DIP)) ZY
(((P_Sede=Cesena(PROG))
(IMP))
D_SSNDir=I.SSN
10
Lalbero di esecuzione
P_Numero,P_Dipertimento,I_Cognome,
I_Indirizzo,I_DataN
4
3
ZY
ZY
D_SSNDir=I.SSN
P_Dipartimento=D_Numero
P_Sede=Cesena
Lalbero di esecuzione
12
Gli indici
13
Gli indici
14
I B+Tree
18
12
15
18
19
Pagine dati
35
25
21
22
34
23
Pagine dati
41
26
27
50
55
28
Pagine dati
15
I B+Tree
I B+Tree
D len( p )
g=
2(len(k ) + len( p ) )
NK len(k ) + NR len( p )
NL =
D u
I B+Tree
1 + log 2 g +1 NL h 2 + log g +1
2
18
dellattributo
RID Ing.
1
0
2
0
3
0
4
0
5
0
Cons.
0
0
0
0
0
Man.
1
0
0
0
0
19
P
Programmatore
t
di bit corrispondenti
q Recupera le tuple
corrispondenti ai RID
RID Ing.
1
0
2
0
3
0
4
0
5
0
Cons.
0
0
0
0
0
Man.
1
0
0
0
0
2,4
20
10
Esempio: Quanti
Quanti maschi in Romagna sono assicurati ?
?
RID
Sesso
Assic.
Regione
No
LO
E/R
No
LA
E/R
=2
21
Occupazione su disco
Gli indici bitmap sono adatti ad attributi con una ridotta cardinalit
poich ogni nuovo valore distinto di chiave richiede un ulteriore
vettore di bit
Allaumentare del numero di chiavi distinte aumenta la sparsit
p
della
matrice
Esempio:
Esempio
Bitmap VS B-Tree
600
Sp
pazio su disco (MB)
NR=10.000.000
Len(Pointer)= Len(Key) = 48 bit
500
400
300
200
100
0
0
10
15
20
25
30
35
40
45
NK
B-Tree
Bitmap
11
Algoritmi di sort
Sort-Merge
24
12
Sort-Merge
d 21
a 19
a 19
g 24
b 14
c 33
d 21
a 19
d 21
c 33
b 14
b 14
c 33
e 16
e 16
e 16
g 24
b 14
c 33
d
r 16
d 31
d 21
Sort interno
d 31
d 31
m 3
m 3
a 14
e 16
r 16
g 24
d 31
m 3
a 14
m 3
r 16
r 16
a 14
Input
2-page runs
1-page runs
Merge
Output
25
Sort-Merge
a 19
b 14
a 14
a 19
a 14
a 14
a 19
b 14
a 19
b 14
c 33
d 31
b 14
Write to disk
when full
c 33
d
a 14
d 21
d 31
c 33
d 31
e 16
d 21
m 3
g 24
e 16
m 3
g 24
r 16
r 16
26
13
Sort-Merge
Sort-Merge
a 14
a 19
b 14
d 31
a 14
a 19
d 21
c 33
m 3
b 14
g 24
e 16
r 16
a 19
b 14
d 31
a 14
d 21
c 33
m 3
g 24
e 16
r 16
2 28
14
EP= NP*Sel(Pred)
(NP + EP) + 2 EP logNB
EP
NB--1 EP
Una curiosit: un tipico DBMS ordina 1 milione di record da 100 byte in 15 minuti. Il record
di 3.5
3 5 secondi con un sistema SGI,
SGI 12 CPU
CPU, 96 dischi e 2 GB di ram
29
Accesso a tabelle
in media a (NP+
(NP+1
1)/2
)/2 blocchi
nel caso peggiore a NP blocchi
In caso di non esistenza del record si accede a NP blocchi
30
15
Accesso a tabelle
Ricerca binaria:
binaria: applicabile se il file ordinato
rispetto al campo su cui deve essere fatta la selezione
In caso di esistenza del record si accede
31
Accesso a tabelle
h: altezza dellindice
sel(pred):
(p ) selettivit delleventuale p
predicato di selezione sullattributo
su cui costruito lindice
NK: numero di valori distinti della chiave
EK: numero di valori di chiave che verificano il predicato di selezione
NL: numero di foglie dellindice
NP: numero di pagine di disco della tabella
NT: numero di tuple della tabella
Indice clustered
clustered:: si ha quando le tuple della tabella sono ordinate
rispetto allattributo dellindice
h-1 + sel(pred) NL
NL + sel(pred) NP
Indice Unclustered:
Unclustered: si ha quando le tuple della tabella non sono
ordinate rispetto allattributo dellindice
h-1 + sel(pred) NL
NL + EK (NT / NK,NP)
32
16
Accesso a tabelle
foglie
33
Una
Il
17
Nel
18
Lordine con cui vengono generate le tuple del risultato coincide con
lordine eventualmente presente nella relazione esterna
A B
22 a
32 z
45 h
87 s
A C
22 z
45 k
22 s
87 f
87 c
45 h
32 g
D
1
3
3
5
6
8
9
A C D
22 z 1
R esterna 22 s 3
32 g 9
45 k 3
45 h 8
87 f 5
87 g 9
B
a
a
z
h
h
s
s
A C D
22 z 1
45 k 3
22 s 3
87 f 5
87 c 6
45 h 8
32 g 9
B
a
h
a
s
s
h
z
S esterna
A B
22 a
32 z
45 h
87 s
S
22
Valore dellattributo
dell attributo
di join
Indice su S.A
A C
22 z
45 k
22 s
87 f
87 c
45 h
32 g
D
1
3
3
5
6
8
9
19
ZY
I_ND=D_Numero
I_Sesso=M
DIP
IMP
costo(R) + ETR costo(S)
Con indice
Senza indice
costo(S)
( ) = h - 1 + 1 / NK NL
NL + sel(pred)
(p
) NP
clustered
costo(S) = NPS
costo(S) = h - 1 + 1 / NK NL
NL + 1 (NR / NK,NP)
unclustered
39
una versione pi sofisticata del nested loop, basata sullo stesso principio
di esecuzione.
Sfrutta un buffer di B pagine in memoria centrale per ridurre il numero di
scansioni della relazione interna S. La scansione di S viene eseguita per
ognii gruppo di (B-1)
(B 1) pagine
i
d ll relazione
della
l i
esterna
t
R che
h vengono
preventivamente caricate in memoria
Il costo di esecuzione del join in termini di pagine di disco lette si riduce
proporzionalmente alla dimensione del buffer. Assumendo lassenza di
predicati locali diventa :
NPR + NPR / (B(B-1) NPS
R esterna
S interna
Buffer
40
20
sort R on cR;
sort S on cS;
CurrR = read(R);
CurrS = read(S);
while not EOF(R) and not EOF(S)
if (CurrR.cR = CurrS.cS) then
{ restituisci CurrR + CurrS;
CurrR = read(R);
CurrS = read(S);
}
else if (CurrR.cR > CurrS.cS) then
CurrS = read(S);
else
CurrR = read(R);
next;
close R;
close S;
41
.....................
cR
12
12
.....................
.....................
.....................
.....................
27
.....................
14
.....................
16
.....................
.....................
.....................
22 ......................
7
h
12, 5
14
17, 0
27
Tabella di hash
......................
......................
12 ......................
7
3, 1
cS
5
......................
17 ......................
0
......................
......................
18 ......................
......................
42
21
Lhybrid
hybrid hash join risolve il problema utilizzano due diverse funzioni
di hash h1 e h2: la prima suddivide le tuple delle relazioni in B1
frammenti di dimensione sufficientemente limitata da far si che le
possano essere
hash table costruite utilizzando la funzione h2 p
mantenute in memoria centrale.
43
Fase 1 build
build:: R viene letta e alle tuple vengono applicati eventuali predicati locali; alle
tuple che risultano eligibili per il join viene applicata la funzione h1. Se il valore corrente
di cR associato al primo dei B1 bucket la tupla viene mantenuta in memoria e a cR
viene direttamente applicata la funzione h2 per creare la hash table in memoria
centrale; in caso contrario, la tupla viene salvata, in base alla funzione h1, in uno dei B1
1 file predisposti su disco.
Fase 1 probe
probe:: S viene letta e alle tuple vengono applicati eventuali predicati locali; alle
tuple che risultano eligibili per il join viene applicata la funzione h1. Se il valore corrente
di cS associato al primo dei B1 bucket la tupla viene mantenuta in memoria e a cS
viene direttamente applicata la funzione h2 identificando cos il bucket della tabella di
hash in memoria centrale con i cui elementi dovranno essere effettivamente effettuati i
confrontati Nel caso in cui il valore corrente di cS non sia associato al primo bucket,
confrontati.
bucket la
tupla salvata, in base alla funzione h1, in uno dei B1 1 file predisposti su disco.
44
22
h2
h2
h1
h1
Tecniche di proiezione
di una sola delle tuple che presentano gli stessi valori di ordinamento
Pertanto il costo di esecuzione viene stimato come costo di
ordinamento della relazione
46
23
Tecniche di aggregazione
clausola di GROUP BY
Applicando loperatore agli attributi coinvolti nella formula di
aggregazione
i
che
h presentano
t
glili stessi
t
i valori
l i di ordinamento
di
t
47
Tecniche di aggregazione
del raggruppamento
48
24
Riassumendo
Dimensione di una relazione: NP = NR len
len(t)
(t) / (D u)
u)
Costo di ordinamento: 2 * NP * ( logNB
NB--1 NP + 1)
Costo di ordinamento con selezioni : (NP + EP) + 2 EP logNB
EP
NB--1 EP
Scansione sequenziale tabelle
iin media
di a (NP+
(NP 1)/
(NP+1
)/2
2 blocchi
bl
hi
nel caso peggiore a NP blocchi
In caso di non esistenza del record si accede a NP blocchi
Proiezione
49
Riassumendo: i join
Nested loop:
senza predicato di selezione NPR + NRR NPS
con predicato di selezione NPR + (sel(pred) NRR ) costo(S)
50
25
e in ORACLE
e in ORACLE
Index Scan: legge i dati da un indice sulla base di una o pi delle sue
chiavi. Le informazioni contenute nellindice possono essere
sufficienti per rispondere allinterrogazione
all interrogazione, in caso contrario vengono
recuperate le RID che permetteranno laccesso alle tabelle. Lindex
scan pu essere dei seguenti tipi:
Unique scan: utilizzabile se deve essere recuperata una sola tupla
Range scan: utilizzabile se devono essere recuperate pi tuple relative a
un range di valori.
Full scan: utilizzabile se esiste un predicato che coinvolge un attributo
52
26
e in ORACLE
Join: prende in input due insiemi di tuple e restituisce il loro join. In base
alla tecnica utilizzata pu essere:
Hash
Nested loops
Merge join
EXPLAIN PLAN
27
Plan Table
---------------------------------------------------------------| Operation
| Name
| Rows | Bytes| Cost |
---------------------------------------------------------------| SELECT STATEMENT
|
|
27K|
8M|
83 |
| NESTED LOOPS
|
|
27K|
8M|
83 |
|
TABLE ACCESS FULL
|LINEITEM |
41 |
8K|
1 |
|
TABLE ACCESS BY INDEX RO|PART
|
66K|
7M|
2 |
|
INDEX UNIQUE SCAN
|SYS_C0095 |
66K|
|
1 |
----------------------------------------------------------------
55
Plan Table
---------------------------------------------------------------| Operation
| Name
| Rows | Bytes| Cost |
---------------------------------------------------------------| SELECT STATEMENT
|
|
27K|
8M|
83 |
| NESTED LOOPS
|
|
27K|
8M|
83 |
|
TABLE ACCESS FULL
|LINEITEM |
41 |
8K|
1 |
|
TABLE ACCESS BY INDEX RO|PART
|
66K|
7M|
2 |
|
INDEX UNIQUE SCAN
|SYS_C0095 |
66K|
|
1 |
---------------------------------------------------------------Oggetto su cui
ha effetto loperazione
Costo delloperazione
56
28
Lottimizzatore
le statistiche relative
allistanza dei dati per calcolare il costo effettivo di esecuzione
dellinformazione
Ottimizzatori cost
cost--based
based:: utilizzano in pi
57
Lottimizzatore
58
29
59
60
30
Regole di trasformazione
1.
Cascata di selezioni
selezioni:: Una condizione di selezione congiuntiva pu
essere spezzata in una sequenza di singole operazioni
c1 AND c2 AND AND cn(R)c1 (c2((cn(R))))
2.
3.
Cascata di proiezioni
proiezioni:: In presenza di una sequenza di operatori si
possono ignorare tutte le proiezioni fuorch lultima
Lista1(Lista2((Listan(R)))) Lista1
4.
5.
Commutativit di ZY
R ZYc S S ZYc R
61
Regole di trasformazione
6.
7. Commutativit di ZY
rispetto a : Sia la lista di proiezione
L=A1,,An,B1,..Bn dove A1,,An R e B1,..Bn S, se la condizione di
join c coinvolge solamente attributi in L allora le due operazioni possono
essere commutate:
L (R ZYc S) A1,,An(R) ZYc B1,,Bn(S)
Se la condizione di join include oltre a quelli in L ulteriori attributi di R e S:
An+1,An+k,Bn+1,,Bn+k. Questi vanno mantenuti sino al join e quindi
necessaria unulteriore operazione di proiezione
L (R ZYc S) L (A1,,An, An+1,,An+k(R) ZYc B1,,Bn,Bn+1,,Bn+k (S)
62
31
Regole di trasformazione
8. Associativit di ZY
(R ZYc1 S) ZYc2 T R ZYc1 (S ZYc2 T)
9. Composizione di E : se la condizione c di unoperazione di
selezione che segue unoperazione prodotto cartesiano
rappresenta una condizione di join allora
c (R S) R ZYc S
63
2.
3.
4.
Usando le regole
g
((5)) e ((8)) si modifichi la sequenza
q
di esecuzione delle
operazioni di join in modo da anticipare il join su relazioni in cui insistono
operazioni di selezione pi restrittive
5.
32
I_Cognome
P_Nome=Aquarius
65
I_Cognome
I_SSN=L_SSNIm
5
P_Numero
= L_Prog
I_DataN
> 3131-12
12-1957
P_Nome=Aquarius
33
ZYP_Numero
= L_Prog
I_Cognome
ZYI_SSN=L_SSNIm
1 I_DataN
> 3131-12
12-1957
P_Nome=Aquarius
4
ZY
I_DataN
I_SSN=L_SSNIm
I_Cognome
ZYP_Numero
= L_Prog
P_Nome=Aquarius
> 3131-12
12-1957
Commutazione join
68
34
7
ZYI_SSN=L_SSNImp
I_SSN
Data_N
I_SSN
ZYP_Numero
P N mero
= L
L_Prog
Prog
P_Numero
P_Nome=Aquarius
L_Prog,L_SSNImp
2
> 3131-12
12-1957
Push--down proiezioni
Push
69
Ottimizzazione rule-based
35
Ottimizzazione rule-based
I produttori di DBMS
rendono note con
riluttanza le regole
secondo cui operano i
propri ottimizzatori.
Nel seguito riportato
un esempio relativo
allottimizzatore
RULE-BASED
di
redbrick, in ambito
data warehousing
Inizio
Su quante DT
definita una
condizione ?
0
No
2 o pi
DT condizionata accedi alla
tabella e recupera le RID di FT
che soddisfano la condizione
Accedi a DT1
Accedi a IXFT1
RID che soddisfa le
condizioni accedi a FT ed
esegui il join con tutte le DT
richieste dal pattern in uscita
La query richiede
di accedere ai
dati della FT ?
No
Scandisci FT e per
ogni
g tupla
p esegui
g il
join con tutte le DT
Si
Accedi a FT tramite
i RID di IXFT1
71
Ottimizzatori cost-based
36
Interrogazioni multi-join
Interrogazioni multi-join
ZY
3
ZY
ZY
ZY
R1
R4
R3
R2
ZY
R1
ZY
R2
R3
R4
Nellalbero di sinistra:
37
Materializzazione vs pipeline
75
Materializzazione vs pipeline
38
Le statistiche
Per le
P
l ttabelle
b ll
Numero di tuple di una tabella.
Dimensione delle tuple.
Numero di blocchi di disco utilizzati
Per colonne
Valore minimo (minval)
Valore massimo (maxval).
Numero di valori distinti (nval)
Numero di valori nulli
Lunghezza media
Distribuzione dei dati (istogrammi)
Per gli indici
Numero di foglie
Profondit
TABLESPACE_NAME
NUM_ROWS
BLOCKS AVG_ROW_LEN
---------------- ----------- --------- ----------DATA
150000
6970
158
DATA
6001215
200485
113
DATA
25
1
105
DATA
1500000
47087
106
DATA
200000
7655
130
DATA
800000
33432
142
DATA
11683
275
59
DATA
5
1
113
DATA
10000
425
143
DATA
2557
25
26
78
39
COLUMN_NAME
NUM_DISTINCT
LOW_VALUE HIGH_VALUE NUM_NULLS AVG_COL_LEN
------------- -------------- ----------- ---------- --------- ----------L_ORDERKEY
1500000
C102
C407
0
6
L_PARTKEY
200000
C102
C315
0
5
L_SUPPKEY
10000
C102
C302
0
4
L_LINENUMBER
7
C102
C108
0
3
L_QUANTITY
50
C102
C133
0
3
L_EXTENDEDPRICE
934059
C20A02 C30B323233
0
6
L_DISCOUNT
11
80
C00B
0
3
......................
79
Le statistiche
1
nval
x minval
maxval minval
maxval x
maxval minval
80
40
Le statistiche
81
Le statistiche
41
Gli istogrammi
83
Gli istogrammi
84
42
12
10
8
6
4
2
0
11
16
21
26
31
36
41
46
51
56
et
85
16
45
40
35
30
25
20
15
10
5
0
14
Nume
ero persone
Nume
ero persone
15
20
25
30
35
40
45
50
et
Istogramma
equi--width
equi
12
55
21
22
23
25
26
27
28
29
34
60
et
Istogramma
equi--heigh
equi
Istogramma equiequi-width:
Istogramma equiequi-heigh:
43
ALL COLUMN
SIZE valore
COLUMNS nomecolonna
Negli esercizi
Il numero delle foglie degli indici va calcolato in base alle formule date
Le stime del numero delle pagine e del numero delle tuple si arrotonda
per eccesso.
Si tratta di una scelta semplificativa, che introduce
unapprossimazione che pu essere anche rilevante: essendo dati
stimati non dovrebbero essere arrotondati
88
44
Gli Hints
Lobiettivo dellottimizzazione
Il piano di esecuzione
Lordine dei join
La tecnica di join
89
Gli Hints
45
Gli Hints
Modalit di accesso
FULL: accede alla tabella con modalit full scan
ROWID: accede alla tabella tramite i RID
INDEX: accede alla tabella tramite index scan
INDEX_ASC/DESC: accede alla tabella tramite index scan, i
91
Gli Hints
Modalit di join
USE_NL: impone lutilizzo dellalgoritmo di nested loop per le
46
93
94
47