• Non ci sono risultati.

CALCOLO DEL C OSTO COSTO DI ACCESSO

N/A
N/A
Protected

Academic year: 2022

Condividi "CALCOLO DEL C OSTO COSTO DI ACCESSO"

Copied!
50
0
0

Testo completo

(1)

CALCOLO CALCOLO DEL COSTO DEL COSTO DI ACCESSO DI ACCESSO

AI DATI

AI DATI

(2)

Progetto di Basi di Dati Progetto di Basi di Dati –

Dove ci troviamo?

Dove ci troviamo?

D) Prog. Concettuale (ER)

1 2 3 4 5 6 7

E) Prog. Logica e Normalizzazione

1 2 3 4

F) Prog. Fisica

(3)

ottimizzatori ottimizzatori

• I criteri che vedremo sono in linea con i metodi e le scelte utilizzati dai query optimizer dei

e le scelte utilizzati dai query-optimizer dei DBMS relazionali

• lo scopo dei query-optimizer è infatti valutarelo scopo dei query-optimizer è infatti valutare quale sia la migliore strategia di accesso

(access path) per le interrogazioni SQL degli utenti

• gli ottimizzatori non prendono decisioni

sull’ordinamento delle relazioni e su quali indici sull’ordinamento delle relazioni e su quali indici costruire

• queste decisioni sono lasciate alqueste decisioni sono lasciate al DBA che deve DBA che deve valutare sulla base del carico di lavoro

(4)

d i i i decisioni

li i di i?

index scan

quali indici?

index scan

relation scan relation scan

R l i di NT t l i NB bl hi ( i ) Relazione di NT tuple in NB blocchi (pagine)

(5)

tili d li i di i utilizzo degli indici

• Un indice può essere utilizzato per p p eseguire una interrogazione SQL se l’attributo su cui è costruito:

• compare nella clausola WHERE

• è contenuto in un FATTORE

• è contenuto in un FATTORE BOOLEANO

il fattore booleano è ARGOMENTO DI

• il fattore booleano è ARGOMENTO DI RICERCA attraverso indice

• compare in un ORDER BY o GROUP BY

(6)

tili d li i di i utilizzo degli indici

• Esempi: per la relazione

IMPIEGATI ( matr, cognome, nome, lavoro,

qualifica, salario, straordinario, dno) 1) la query: SELECT cognome, salario

FROM impiegati WHERE dno = 51 AND salario > 2000

AND (lavoro = ‘fattorino’

OR lavoro = ’guardiano’) oppure ….

(7)

tili d li i di i utilizzo degli indici

2) la query: SELECT cognome, salario FROM impiegati

WHERE dno = 51

AND salario + straordinario > 3000 AND (lavoro = ‘fattorino’

OR qualifica = 7)q )

(8)

tili d li i di i utilizzo degli indici

Separazione della condizione WHERE in

fattori booleani: un predicato è un fattore boleano se è collegato alla radice del WHERE-tree da AND

(query 1) AND

AND

(query 1) AND

dno = 51 OR

salario salario

> 2000

lavoro = ‘fattorino’ lavoro = ‘guardiano’

(9)

tili d li i di i utilizzo degli indici

un predicato è un fattore boleano se con risultato un predicato è un fattore boleano se con risultato falso determina il risultato falso per la query

(query 2)

AND AND

(query 2)

dno = 51 salario + OR straordinario

> 3000

lavoro = ‘fattorino’ qualifica = 7

(10)

tili d li i di i utilizzo degli indici

1) per la query 1 sono fatt. bool. argomenti di ricerca:

dno = 51 , salario > 2000

(lavoro = ‘fattorino’ OR lavoro = ’guardiano’)

dno salario lavoro

dno salario lavoro

(11)

tili d li i di i utilizzo degli indici

2) per la query 2 è fatt. bool. argomento di ricerca solo: dno = 51

per (lavoro = ‘fattorino’ OR qualifica = 7) se il DBMS può usare più indici per una query:

qualifica

lavoro qualifica

+

si può effettuare l’unione delle liste di TID

(12)

tili d li i di i utilizzo degli indici

2) per la query 2 è non è fatt. bool. argomento di ricerca: salario + straordinario > 3000

sia che il DBMS possa usare più indici per

h l

una query che uno solo :

straordinario salario straordinario salario

?

? ?

non si può effettuare l’unione delle liste di TID

(13)

tili d li i di i utilizzo degli indici

per una query sono argomento di ricerca i

predicati del tipo: attributo . comparatore. valore, ad es.:

dno = 47 (<, < = ,> = , > , between) SI dno = $D (variabile di programma) SI

dno = 47 OR dno = 32 SI

(IN corrisponde ad OR ma non sempre è SI) (dno = 47) OR (qualifica = 3) SI/NO salario + straordinario > 3000 NO

salario = straordinario (stessa relazione) NO

(14)

d ll di t modello di costo

• Un indice è utile per una query solo se il costo

di l’i di è < t d ll’

di accesso con l’indice è < costo dell’accesso sequenziale cioè < NB ( NB/2 se attributo

unique)q )

• il modello comunemente utilizzato (ce ne sono di molto più sofisticati e precisi) serve per

i i i di i i b

previsioni di massima e si basa su:

–per la relazione : NT, NB

per ogni indice :NF (numero di foglie) –per ogni indice :NF (numero di foglie)

–per ogni attributo :NK (cardinalità), max, min –tutti valori desumibili dai cataloghi dei DBMS –tutti valori desumibili dai cataloghi dei DBMS –le grandezze sono uniformemente distribuite

(15)

selettività selettività

• Un predicato è selettivo se ci si aspetta che non t tte le t ple lo soddisfino

tutte le tuple lo soddisfino

• fattore di selettività (filtro) F di un predicato : frazione di tuple che soddisfano il predicato frazione di tuple che soddisfano il predicato

nt / NT = valori selezionati / NK = SK / NK

–A = valore F = 1 / NKA

dno = 24 F = 1/ Nk default = 1/10

dno = 24 Fdno = 1/ Nkdno , default = 1/10

–A IN (val1, val2, val3 ) F = 3 / NKA

d IN ( 24 36) F 2/ NK

dno IN ( 24, 36) Fdno = 2/ NKdno analogamente per dno = 24 OR dno = 36

i l F l i/ NK d f l 1/2

in generale F= numero valori/ NKA , default = 1/2

(16)

l tti ità selettività

• A > valore F = SK / NKA , default f=1/3

voto > 27 Fvoto = 4/ 15

se i voti vanno da 17 a 31 e supponendo che se i voti vanno da 17 a 31 e supponendo che tutti siano stati assegnati almeno una volta

per salario > 2000 (range la cui cardinalità non per salario > 2000 (range la cui cardinalità non è controllabile) si può prendere:

F l i = (max(sal) - 2000) / (max(sal) - min(sal)) Fsalario = (max(sal) - 2000) / (max(sal) - min(sal)) analogamente per BETWEEN 2000 AND 3500

F = (3500 2000) / (max(sal) min(sal)) Fsalario = (3500 - 2000) / (max(sal) - min(sal))

default f=1/4

(17)

selettività selettività

• Predicati su attributi diversi – pred1 OR pred2 :

F = Fpred1pred1 + Fpred2pred2 - Fpred1pred1 pred2Fpred2 – attributo A = attributo B

F = 1 / max(NK NK ) F = 1 / max(NKA, NKB)

se i due domini sono sovrapposti, altrimenti F=0

i A t l

- negazione : A = not valore

F = 1-1 / NKA

per ottenere maggiori precisioni molti sistemi memorizzano istogrammi semplificati

(18)

selettività selettività

• Numero di tuple del risultato:

E = NT × Fpred1 e

–nell’ipotesi di assenza di correlazione tra i p valori degli attributi, per più predicati:

E = NT × Πii prediFpredi

- l’ipotesi non è sempre verificata, bisognerebbe rilevarel ipotesi non è sempre verificata, bisognerebbe rilevare un fattore di correlazione o di clustering relativo tra valori di attributi differenti:

. tipo di lavoro, data di nascita: incorrelati . qualifica, dipartimento: correlati

(19)

costo di accesso costo di accesso

I casi esaminati si differenziano a seconda I casi esaminati si differenziano a seconda che:

• indice clustered / unclustered

• indice clustered / unclustered

• attributo unique / con ripetizione dei valori

• predicato di uguaglianza / di range / OR predicato di uguaglianza / di range / OR

• uso di un solo indice / più indici

(20)

Ipotesi di buffer Ipotesi di buffer

Si considera per ogni relazione o indice Si considera, per ogni relazione o indice, che ogni cambio di riferimento a pagina referenzi una pagina fuori dal buffer di referenzi una pagina fuori dal buffer di memoria centrale.

E’ i l i ( i di )

E’ come se ogni relazione (o indice ) avesse una sola pagina di buffer in

i t l

memoria centrale.

E’ un’ipotesi pessimistica che tende a p p

calcolare upper bound.

(21)

costo di accesso costo di accesso

Il costo C è dato dalla somma : Il costo C è dato dalla somma :

C

indice

+ C

relazione

(22)

costo di accesso costo di accesso

• indice clustered / unclustered su attributo unique con predicato di uguaglianza:

esempio, matr = 236 (sulla relazione impiegati) foglia

indice Costo = 1 foglia + 1 blocco = 2 blocco

d ti

Costo 1 foglia 1 blocco 2

dati

se l’indice è clustered o unclustered è lo stesso

(23)

costo di accesso costo di accesso

• indice clustered con E > 1:

matr between 236 and 312, lavoro = ‘guardiano’

Costo = ⎡F × NF⎤ + ⎡ F × NB ⎤

(24)

costo di accesso costo di accesso

• indice unclustered / clustered :

l di

lavoro = guardiano

Costo = (⎡F × NF⎤ + ⎡ F × NT ⎤) con F = F valorevalore analogamente per il caso clustered

Costo = (⎡F × NF⎤ + ⎡ F × NB ⎤)

(25)

costo di accesso costo di accesso

• indice unclustered / clustered (predicato OR):

l di OR ti

lavoro = guardiano OR portiere

Costo = 2 × (⎡F × NF⎤ + ⎡ F × NT ⎤) con F = F valorevalore sono 2 accessi distinti,

analogamente per il caso clustered Costo = 2 × (⎡F × NF⎤ + ⎡ F × NB ⎤)

(26)

costo di accesso costo di accesso

• Uso di più indici unclustered con E > 1:

i i / i d i TID i d li i di i

intersezione /unione dei TID estratti dagli indici matr between 236 and 312, lavoro = guardiano

Costo = Σk⎡F k × NF k ⎤ + ⎡ Πk F k × NT ⎤

(27)

costo di accesso costo di accesso

Costo = Σ ⎡F × NF ⎤ + ⎡ Π F × NT ⎤ Costo = Σk⎡Fk × NF k ⎤ + ⎡ Πk Fk × NT ⎤ Questa formula è molto imprecisa perché Questa formula è molto imprecisa perché

presuppone la mancanza di correlazione tra attributi Questo metodo può essere migliorato aggiungendo Questo metodo può essere migliorato aggiungendo indici k solo se portano un vantaggio di selettività

al secondo termine superiore allo svantaggio introdotto nella sommatoria del primo

nella sommatoria del primo

(28)

costo di accesso costo di accesso

Esempio:p

SELECT * FROM IMPIEGATI

WHERE lavoro = ‘fattorino’ AND salario < 1500 WHERE lavoro fattorino AND salario 1500 con NT = 10000, NB = 1000,

NKsal = 100 NKlav = 50 NKsal 100 NKlav 50

indici: clustered su salario con NF = 160 unclustered su lavoro con NF = 100 unclustered su lavoro con NF = 100 supponiamo che la selettività sia.

Flavlav = 1 / 50 = 0.02

Fsal = (1500 - min) / (max- min) = 0.1

(29)

costo di accesso costo di accesso

costo delle scansione sequenziale:

Cseq = 1000

costo dell’indice su lavoro (unclust.):

Clav = ⎡Flav × NFlav⎤ + ⎡ Flav × NT ⎤ =

0.02 × 100 + 0.02 × 10000 = 2 + 200 = 202 costo dell’indice su salario (clust):

C = ⎡F × NF ⎤ + ⎡ F × NB ⎤ = Csal = ⎡Fsal × NFsal⎤ + ⎡ Fsal × NB ⎤ =

0.1 × 160 + 0.1 × 1000 = 16 +100 = 116 Cseq > Clav > Csal

(30)

costo di accesso costo di accesso

scambiamo adesso l’ordinamento per gli indici:

costo dell’indice su lavoro (clust.):

Clavlav = ⎡Flavlav × NFlavlav⎤ + ⎡ Flavlav × NB ⎤ =

0.02 × 100 + 0.02 × 1000 = 2 + 20 = 22 t d ll’i di l i ( l t)

costo dell’indice su salario (unclust):

Csal = ⎡Fsal × NFsal⎤ + ⎡ Fsal × NT ⎤ =

0 1 160 0 1 10000 16 1000 1016 0.1 × 160 + 0.1 × 10000 = 16 +1000 = 1016 Csal > Cseq > Clav

(31)

costo di accesso costo di accesso

tuple del risultato:p E = Flav × Fsal× NT = 20

l lt i li l è

• la scelta migliore per la query è avere un

ordinamento su lavoro e un indice su lavoro, mentre l’indice su salario non deve essere

mentre l indice su salario non deve essere costruito

• il miglioramento che si ottiene rispetto

all’assenza di indici e ordinamenti è di 1 a 45

• nel caso in cui l’ordinamento su salario si di

tilità lt l’i di l t d

utilità per altre query l’indice unclustered su lavoro porta ad un miglioramento di 1 a 9

(32)

uso degli indici uso degli indici

Miglioramento della formula di costo nel caso di ordinamento dei TIDs

tids ordinati array di E

valore

RELAZIONE

1 2 NB

RELAZIONE

(33)

d

cardenas

C relazione relazione

puo' essere calcolato meglio usando lap g formula di CARDENAS (Comm. ACM 1975):

Φ (k n) = ⎡ n × (1 (1 1/n)k)Φ (k,n) = ⎡ n × (1-(1-1/n)k)

C relazione

= Φ (E,NB) = ⎡ NB × (1-(1-1/NB)E)

C relazione

Φ (E,NB) ⎡ NB (1 (1 1/NB) ) ⎤ La formula e' valida sotto le seguenti ipotesi:

a) tutti i record sono equiprobabili,

b) tutti i blocchi contengono lo stesso numero di tuple, c) come conseguenza di a) e b) tutti i blocchi sono

equiprobabili.

(34)

cardenas cardenas

Φ(E,NB) può essere ricavata come segue:

• 1/NB è la probabilità che un blocco contenga una data tupla estratta dagli E,g

• 1-1/NB è la probabilità che un blocco non contenga una data tupla estratta dagli E

• (1-1/NB)EE è la probabilità che un blocco non contenga nessuna delle E tuple

1 (1 1/NB) E è l b bilità h bl

• 1-(1-1/NB) E è la probabilità che un blocco

contenga almeno una delle E tuple e quindi venga visitato

visitato,

• NB

×

(1-(1-1/NB)E) è il numero di blocchi che ci si

(35)

d t di Φ

andamento di Φ

L' d t l d ll è i t t i fi

L'andamento generale della Φ è riportato in figura:

(36)

andamento di Φ

Tabella con NB = 100

L f l di C d l l 10 10

E ⎡ Φ ⎤

• La formula di Cardenas calcola in ogni caso il numero

Φ

di

bl hi i it ti ( l i i

10 10 20 18 30 26

blocchi visitati (con qualsiasi successione).

40 33 50 39 60 45

• Il numero di accessi Crelazione è calcolabile con la formula di

C d l i TID

60 5

70 51 80 55

90 60

Cardenas solo se i TIDs sono in ordine.

90 60 100 63 150 78

200 87

200 87 250 95

(37)

tili d li i di i utilizzo degli indici

C di i di l t d "l l t Caso di indice unclustered "localmente

ordinato" : con i TIDs in ordine crescente per ogni valore della chiave

ogni valore della chiave

foglie chiave + tids

a b ...

....

foglie indice

a b a b b a a b

a b a b b a a b

.. .. ... .. ... .. ... .. ...

n-ple

(38)

tili d li i di i utilizzo degli indici

• Predicato : Col = valore

C = ⎡F

col ×

NF⎤ + ⎡Φ(E,NB)⎤

dove E = Fcol × NT

• Predicato di tipo : valore1< Col < valore2

⎡ ⎤ ⎡ ⎤

C = ⎡F

col ×

NF⎤ + ⎡K

×

Φ(E/K,NB)⎤

dove K = Fcol × NK

(39)

tili d li i di i utilizzo degli indici

• Rivediamo i calcoli con

Φ

per l’esercizio p precedente con indici unclustered:

predicato: lavoro = ‘fattorino’

predicato: lavoro = fattorino

C = ⎡F

lav ×

NF

lav

⎤ + ⎡Φ(E,NB)⎤

dove Elav = Flav × NT =200

C = ⎡F

lav ×

NF

lav

⎤ + ⎡Φ(200,1000)⎤

= 2 + 182 = 184 (era 202)

= 2 + 182 = 184 (era 202)

(40)

tili d li i di i utilizzo degli indici

• Predicato : salario < 1500

C = ⎡F

sal ×

NF

sal

⎤ + ⎡K

×

Φ(E

sal

/K,NB)⎤

dove K = Fsal × NKsal

E

salsal

/K =

fsalsal × NT dove fsalsal è il filtro per p 1 valore di salario

E

salsal

/K =

fsalsal × NT = 10000/100 = 100

C = 16 + ⎡10

×

Φ(100,1000)⎤ =

= 16 + 952 = 968

(era 1016)

= 16 + 952 = 968

(era 1016)

(41)

tili d li i di i utilizzo degli indici

Esempio: variazione con Kp

NF = 1.800, NT = 1.000.000, NK = 100.000, NB = 100.000

5

6 Costi

con indice

3 4

5 ( x 100000 ) con indice

1 2 3

scan sequenziale

0 1

1 10 100 1000 10000 100000

K

(42)

tili d li i di i utilizzo degli indici

• Le tuple del risultato vengono poi controllateLe tuple del risultato vengono poi controllate con i predicati residui:

SELECT * FROM IMPIEGATI SELECT * FROM IMPIEGATI WHERE lavoro = ‘fattorino’

AND tà 35 AND età < 35

AND salario + straordinario >3

predicato residuo La selettività dei predicati residui è difficile

(43)

uso degli indici uso degli indici

• Perché non mettere indici su tutti gli attributi?

Il query optimizer potrebbe poi scegliere Il query optimizer potrebbe poi scegliere.

• Gli indici devono essere mantenuti:

caso DELETE: eliminazione di TID caso DELETE: eliminazione di TID

Costo = Nind × E’ (Nind : numero indici E’ E 2) E’ = E × 2)

(44)

uso degli indici uso degli indici

caso UPDATE: spostamento di TID caso U sposta e to d

Costo = Nind × 2 × E’ (Nind: numero indici E’ = E × 2) E = E × 2) Un numero indici troppo elevato comporta un eccessivo costo di modifica della relazione

eccessivo costo di modifica della relazione

(45)

rif biblio : rif. biblio.:

Antonio Albano:

“Costruire sistemi per basi di dati”.

Addison Wesley 2001y contenuti:

strutture files strutture files struttura DBMS

recovery e concorrenza ottimizzatori

DDBMS

riferimenti: oracle sybase informix DB2 SQl server riferimenti: oracle, sybase, informix, DB2, SQl server

(46)

rif biblio : rif. biblio.:

Fabio Grandi:

“Esercizi di Basi di Dati”.

Progetto Leonardo, Bologna, 2007g , g , contenuti:

Esercizi risolti e ampiamente commentati di:

Esercizi risolti e ampiamente commentati di:

• interrogazione e manipolazione SQL

• ottimizzazione piani di accesso

(47)

alcuni rif biblio : alcuni rif. biblio.:

Validità di Φ:

P Ciaccia D Maio P Tiberio: "A unifying approach to evaluating P.Ciaccia, D.Maio, P.Tiberio: "A unifying approach to evaluating block accesses in data base organizations." Information Proc. Lett., vol 28, no. 5, 1988.

UPDATE: calcolo dei costi

M.Schkolnick, P.Tiberio: "Estimating the cost of updates in a relational database" ACM Transactions on Database Systems vol relational database". ACM Transactions on Database Systems, vol 10, 2, 1985.

Calcolo dei costi e scelta degli indici:g

R.Bonanno, D.Maio, P.Tiberio: "An approximation algorithm for secondary index selection in relational database physical design".

The Computer Journal vol 28 4 1985 The Computer Journal, vol. 28, 4, 1985.

S.Finkelstein, M.Schkolnick, P.Tiberio: "Physical database design for relational databases". ACM Transactions on Database Systems, marzo 1988

marzo 1988.

(48)

Formulario

Formulario

(49)

Costo di accesso Costo d accesso

E = ⎡ΠiFi * NT⎤

F: default

K = ⎡ΠiFi * NK⎤

F: default

A = val 1 / NKA <= 1/10

A IN (val( 11, val, 22 ... valnn ) (OR)) ( ) n / NKAA <= 1/2 A > val (maxA-val) / (maxA-minA) <= 1/3

A < val (val min ) / (max min ) <= 1/3

A < val (val-minA) / (maxA-minA) <= 1/3 A BETWEEN val1 AND val2 (val1-val2) / (maxA-minA) <= 1/4

A = NOT val 1-1 / NKA

A = B 1 / max(NKA, NKB)

pred1 OR pred2 Fpred1+ Fpred2 -Fpred1Fpred2

(50)

Costo di accesso Costo d accesso

• CA = 1 foglia + 1 blocco = 2 E=1

indice clustered / unclustered indice clustered / unclustered

• CA = ⎡F * NF⎤ + ⎡F * NB⎤ E>1 indice clustered indice clustered

• CA = ⎡F * NF⎤ + ⎡F * NT⎤ E>1

indice unclustered (TID disordinati) indice unclustered (TID disordinati)

• CA = Σk ⎡Fk * NFk⎤ + ⎡Πk Fk * NT⎤ E>1

più indici unclustered (unione TID) (!)

p ( ) ( )

• CA = ⎡F * NF⎤ + ⎡Φ(E,NB) ⎤ E>1 K=1

indice unclustered (TID ordinati)

• CA = ⎡F * NF⎤ + ⎡K * Φ(E/K,NB)⎤ E>1 K>1

Riferimenti

Documenti correlati

Capitolo 3 - Implementazione del codice e scelte architetturali .... 2 Codifica del codice

L aureata in common law offre servizio di traduzione e revisione di atti, lettere/e-mail e documenti di ogni genere da italiano a inglese giuridico. Esperienza e

Tavola 7.21- Distribuzione di mangimi complementari prodotti dall’industria, per specie e categoria di animali e regione……….

È la parte di una pavimentazione permeabile visibile dall'esterno, la sua superficie. Può essere di diversi materiali, colori, scabrezze, accessibilità, a seconda delle

Tavola 1.6 segue - Popolazione media dei capoluoghi e degli altri Comuni per provincia (a).. Tavola 1.7 - Movimento naturale della popolazione residente secondo il

ripartizione geografica e settore di attività economica ……… 85 Tavola 3.20 - Occupati per numero di ore settimanali effettivamente lavorate, sesso,.. ripartizione geografica

Tavola 1.36 - Occupati in cerca di lavoro per sesso, settore di attività economica, rela- zione di parentela, classe di età, titolo di studio, posizione nella professione, tipo

 document:contiene le proprietà basate sul contenuto del docuumento come il titolo,i links, le form..  location: le proprietà basate