La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Architettura di un DBMS Un DBMS deve garantire una gestione dei dati: – efficiente – concorrente – affidabile – integra – sicura (protetta) Ciascuno.

Presentazioni simili


Presentazione sul tema: "1 Architettura di un DBMS Un DBMS deve garantire una gestione dei dati: – efficiente – concorrente – affidabile – integra – sicura (protetta) Ciascuno."— Transcript della presentazione:

1 1 Architettura di un DBMS Un DBMS deve garantire una gestione dei dati: – efficiente – concorrente – affidabile – integra – sicura (protetta) Ciascuno degli aspetti precedenti è supportato dal DBMS da specifiche componenti, che complessivamente rappresentano larchitettura del sistema

2 2 Componenti di un DBMS Efficienza: – File system: gestisce l'allocazione dello spazio su disco e le strutture dati usate per rappresentare le informazioni memorizzate su disco – Buffer manager: responsabile del trasferimento delle informazioni tra disco e main memory – Query parser: traduce i comandi del DDL e del DML in un formato interno (parse tree) – Optimizer: trasforma una richiesta utente in una equivalente ma più efficiente

3 3 Componenti di un DBMS Affidabilità: – Recovery manager: assicura che il DB rimanga in uno stato consistente a fronte di cadute del sistema Concorrenza: – Concurrency controller: assicura che interazioni concorrenti procedano senza conflitti Integrità: – Integrity manager: controlla che i vincoli di integrità (per esempio le chiavi) siano verificati Sicurezza – Authorization manager: controlla che gli utenti abbiano i diritti di accesso ai dati

4 4 Componenti di un DBMS Un DBMS contiene inoltre alcune strutture dati che includono: – i file con i dati (cioè i file per memorizzare il DB stesso) – i file dei dati di sistema (che includono il dizionario dei dati e le autorizzazioni) – indici (esempio B­tree o tabelle hash) – dati statistici (esempio il numero di tuple in una relazione) che sono usati per determinare la strategia ottima di esecuzione

5 5 Efficienza Finora (Basi di dati 1) abbiamo visto modelli di DBMS ad alto livello (livello logico) Tale livello è il livello corretto per gli utenti del DB Un fattore importante nell'accettazione da parte dell'utente è dato dalle prestazioni Le prestazioni del DBMS dipendono dall'efficienza delle strutture dati e dall'efficienza del sistema nell'operare su tali strutture dati

6 6 Efficienza Esistono varie strutture alternative per implementare un modello dei dati La scelta delle strutture più efficienti dipende dal tipo di accessi che si eseguono sui dati Normalmente un DBMS ha le proprie strategie di implementazione di un modello dei dati Tuttavia l'utente (esperto) può influenzare le scelte fatte dal sistema (livello fisico)

7 7 Mapping di relazioni a file Per DBMS di piccole dimensioni (es. per PC) una soluzione spesso adottata è di memorizzare ogni relazione in un file separato nel caso di DBMS large-scale questa strategia di base deve essere estesa (molto spesso il DBMS deve poter allocare in modo opportuno i record ai blocchi per minimizzare le operazioni di I/O) – una strategia frequente è di allocare per il DBMS un unico grosso file, in cui sono memorizzate tutte le relazioni – la gestione di questo file è lasciata al DBMS

8 8 Clustering Si consideri la seguente interrogazione: SELECT Imp#, Nome, Sede FROM Impiegati, Dipartimenti WHERE Impiegati.Dip# = Dipartimenti.Dip# una strategia di memorizzazione efficiente è basata sul raggruppamento (clustering) delle tuple che hanno lo stesso valore dell'attributo di join il clustering può rendere inefficiente l'esecuzione di altre interrogazioni – es. SELECT * FROM Dipartimenti

9 9 Clustering

10 10 Strutture ausiliarie di accesso Spesso le interrogazioni accedono solo un piccolo sottoinsieme dei dati Per risolvere efficientemente le interrogazioni può essere utile allocare delle strutture ausiliarie che permettano di determinare direttamente i record che verificano una data query (senza scandire tutti i dati)

11 11 Strutture ausiliarie di accesso Ogni tecnica deve essere valutata in base a: – tempo di accesso – tempo di inserzione – tempo di cancellazione – occupazione di spazio Molto spesso è preferibile aumentare l'occupazione di spazio se questo contribuisce a migliorare le prestazioni Si usa il termine chiave di ricerca per indicare un attributo o insieme di attributi usati per la ricerca (diverso dalla chiave primaria)

12 12 Strutture ausiliarie di accesso Una ricerca può essere effettuata per: – chiave primaria: il valore della chiave identifica un unico record Es. il contribuente con codice fiscale GRRGNN69R48 – chiave secondaria: il valore della chiave può identificare più record Es. i contribuenti di Genova – intervallo di valori (sia per chiave primaria che per secondaria) Es. i contribuenti con reddito compreso tra 60 e 90 milioni – combinazioni delle precedenti Es. i contribuenti di Genova e La Spezia con reddito compreso tra 60 e 90 milioni

13 13 Strutture ausiliarie di accesso Per effettuare la ricerca in modo più efficiente si può pensare di mantenere il file ordinato secondo il valore di una chiave di ricerca in questo caso però la ricerca su altri campi è inefficiente

14 14 Strutture ausiliarie di accesso Organizzazioni primarie: – impongono un criterio di allocazione dei dati (organizzazioni ad albero o hash) organizzazioni secondarie: – uso di indici (separati dal file dei dati) normalmente organizzati ad albero in generale si hanno a disposizione più modalità (cammini) di accesso ai dati

15 15 Strutture ausiliarie di accesso

16 16 Indici Idea base: associare al file dei dati una tabella' nella quale l'entrata i­esima memorizza una coppia (k i,r i ) dove: – k i è un valore di chiave del campo su cui l'indice è costruito – r i è un riferimento al record (ai record) con valore di chiave k i il riferimento può essere un indirizzo (logico o fisico) di record o di blocco

17 17 Indici: esempio File dei dati: chiavic5 c2 c11 c7 c4 indirizzi indice: chiave k i indirizzo r i c2 8 c4 48 c5 0 c7 32 c11 16

18 18 Indici Le diverse tecniche differiscono nel modo in cui organizzano l'insieme di coppie (k i,r i ) vantaggio nell'uso di un indice: – la chiave è solo parte dell'informazione contenuta in un record, quindi l'indice occupa meno spazio del file dei dati un indice può comunque raggiungere notevoli dimensioni che determinano problemi di gestione simili a quelli del file dei dati

19 19 Indici Esempio: – Indice per un file di 50k record, in cui i valori di chiave sono stringhe di 20 byte e i puntatori sono di 4 byte, richiede circa 1,2Mb ogni entrata nellindice: byte numero max entrate: 50 k totale: 24 * 50 K = 1,2 Mb

20 20 Tipi di indice Gli indici possono essere classificati rispetto a diverse dimensioni: – unicità valori chiave di ricerca – ordinamento dei record nel file di dati – numero di entrate nellindice – numero di livelli

21 21 Unicità dei valori di chiave Indice su chiave primaria: – indice su un attributo che è chiave primaria per la relazione (a ogni entrata dell'indice corrisponde un solo record) Indice su chiave secondaria: – indice su un attributo che non è chiave primaria per la relazione (ad ogni entrata dell'indice possono corrispondere più record)

22 22 Ordinamento dei record nel file dei dati Indice clusterizzato (o indice primario): – indice sull'attributo secondo i cui valori il file dei dati è mantenuto ordinato indice non clusterizzato (o indice secondario): – indice su un attributo secondo i cui valori il file dei dati non è mantenuto ordinato

23 23 Numero di coppie nellindice Indice denso – indice il cui numero di entrate (ki, ri) è pari al numero di valori di ki Indice sparso – indice il cui numero di entrate (ki, ri) è minore del numero di valori di ki

24 24 Numero di livelli Indice a singolo livello – indice organizzato su un singolo livello Indice multilivello – indice organizzato su più livelli

25 25 Indici densi e sparsi Indice denso: l'indice contiene un'entrata per ogni valore della chiave di ricerca nel file – Ricerca: scansione per trovare il record con valore chiave uguale al valore cercato – recupero dati fino a che il valore non cambia Indice sparso: le entrate dell'indice sono create solo per alcuni valori della chiave. – Ricerca: scansione fino a trovare il record con il più alto valore della chiave che sia minore o uguale al valore cercato – scansione sequenziale del file dei dati fino a trovare il record cercato

26 26 Indice denso

27 27 Indice sparso

28 28 Indici densi e sparsi Un indice denso consente una ricerca più veloce, ma impone maggiori costi di aggiornamento Un indice sparso è meno efficiente ma impone minori costi di aggiornamento Poiché molto spesso la strategia è di minimizzare il numero di blocchi trasferiti, un compromesso spesso adottato consiste nell'avere una entrata nell'indice per ogni blocco

29 29 Indici multilivello Un indice anche se sparso può essere di dimensioni notevoli Esempio: file di record, con 10 record per blocco, richiede un indice con entrate se ogni blocco contiene 100 entrate dellindice: 100 blocchi

30 30 Indici multilivello Se lindice è piccolo, può essere tenuto in memoria principale molto spesso, però, è necessario tenerlo su disco e la scansione dellindice può richiedere parecchi trasferimenti di blocchi – circa 7 nel nostro esempio, se si utilizza ricerca binaria Soluzione: – si tratta lindice come un file e si alloca un indice sparso sullindice stesso – si parla di indice sparso a due livelli

31 31 Indici multilivello se lindice esterno è mantenuto in memoria principale basta accedere un solo blocco di indice

32 32 Tecniche di indicizzazione Le strutture per MS differiscono da quelle per MM perché si cerca di minimizzare il numero di blocchi acceduti (che determina il costo della ricerca) – basate su alberi (B-tree e varianti) – basate su tabelle hash

33 33 B-Alberi i B-alberi sono organizzazioni ad albero bilanciato, utilizzate come strutture di indicizzazione per dati in memoria secondaria requisiti fondamentali per indici per memoria secondaria: – bilanciamento: lindice deve essere bilanciato rispetto ai blocchi e non ai singoli nodi (è il numero di blocchi acceduti a determinare il costo I/O di una ricerca) – occupazione minima: è importante che si possa stabilire un limite inferiore allutilizzazione dei blocchi, per evitare una sotto-utilizzazione della memoria – efficienza di aggiornamento: le operazioni di aggiornamento devono avere costo limitato

34 34 B-alberi garantiscono unoccupazione di memoria almeno del 50% (almeno metà di ogni pagina allocata è effettivamente occupata) consentono di effettuare loperazione di ricerca con costo, nel caso peggiore, logaritmico nella cardinalità dellindice (cioè nel numero di valori distinti della chiave di ricerca) in un B-albero ogni nodo ha al più m figli, dove m è lunico parametro dipendente dalle caratteristiche della memoria, cioè dalla dimensione del blocco

35 35 B-alberi Un B-albero di ordine m (m 3) è un albero bilanciato che soddisfa le seguenti proprietà: – ogni nodo contiene al più m - 1 elementi – ogni nodo contiene almeno elementi, – la radice può contenere anche un solo elemento ogni nodo non foglia contenente j elementi ha j +1 figli ogni nodo ha una struttura del tipo: p 0 (k 1, r 1 )p 1 (k 2, r 2 )p 2... p j-1 (k j, r j )p j dove j è il numero degli elementi del nodo

36 36 B-alberi In ogni nodo p 0 (k 1, r 1 )p 1 (k 2, r 2 )p 2... p j-1 (k j, r j )p j k 1,..., k j sono chiavi ordinate, cioè k 1 < k 2 <... < k j nel nodo sono presenti j + 1 riferimenti ai nodi figli p 0,..., p j e j riferimenti al file dei dati r 1,..., r j per ogni nodo non foglia, detto K(p i ) (i = 1,..., j) linsieme delle chiavi memorizzate nel sottoalbero di radice p i, si ha: – y K(p 0 ), y < k 1 – y K(p i ), k i < y < k i+1, i = 1,..., j - 1 – y K(p j ), y > k j

37 37 B-alberi Formato di un nodo di un B-albero

38 38 B-alberi Esempio di B-albero di ordine 5

39 39 B+-alberi Un B-albero è molto efficiente per la ricerca e la modifica dei singoli record – ad esempio, con m = 100 e N = la ricerca di una chiave comporta al massimo 4 accessi a disco un B-albero non è però particolarmente adatto per elaborazioni di tipo sequenziale nellordine dei valori di chiave, né per la ricerca dei valori di chiave compresi in un certo intervallo – la ricerca del successore di un valore di chiave può comportare la scansione di molti nodi per ovviare a questo problema è stata proposta una variante dei B-alberi, nota come B+-alberi

40 40 B+-alberi Idea principale: in un B-albero, i valori di chiave svolgono una duplice funzione: – separatori: per determinare il cammino da seguire nella ricerca – valori di chiave: permettono di accedere allinformazione ad essi associata nei B+-alberi queste funzioni sono mantenute separate: – le foglie contengono tutti i valori di chiave – i nodi interni (organizzati a B-albero) memorizzano dei separatori la cui sola funzione è determinare il giusto cammino nella ricerca di una chiave

41 41 B+-alberi i nodi foglia sono inoltre collegati a lista, per facilitare ricerche per intervalli di chiavi o sequenziali (+ puntatore alla testa di tale lista, per accedere velocemente al valore di chiave minimo) parziale duplicazione delle chiavi – le entrate dellindice (chiavi e riferimenti ai dati) sono solo nelle foglie – la ricerca di una chiave deve individuare una foglia

42 42 B+-alberi il sottoalbero sinistro di un separatore contiene valori di chiave minori del separatore, quello destro valori di chiave maggiori od uguali al separatore nel caso di chiavi alfanumeriche facendo uso di separatori di lunghezza ridotta si risparmia spazio

43 43 B+-alberi Un B+-albero di ordine m (m 3) è un albero bilanciato che soddisfa le seguenti proprietà: – ogni nodo contiene al più m - 1 elementi – ogni nodo, tranne la radice, contiene almeno elementi, la radice può contenere anche un solo elemento – ogni nodo non foglia contenente j elementi ha j +1 figli

44 44 B+-alberi ogni nodo foglia ha una struttura del tipo: (k 1, r 1 )(k 2, r 2 )... (k j, r j ) dove: – j è il numero degli elementi del nodo – k 1,..., k j sono chiavi ordinate, cioè k 1 < k 2 <... < k j – r 1,..., r j sono j riferimenti al file dei dati ogni nodo foglia ha un puntatore al nodo foglia precedente e successivo

45 45 B+-alberi ogni nodo non foglia ha una struttura del tipo: p 0 k 1 p 1 k 2 p 2... p j-1 k j p j dove: – j è il numero degli elementi del nodo – k 1,..., k j sono chiavi ordinate, cioè k 1 < k 2 <... < k j – p 0, …, p j sono j+1 riferimenti ai nodi figli

46 46 B+-alberi per ogni nodo non foglia, detto K(p i ) (i = 0,..., j) linsieme delle chiavi memorizzate nel sottoalbero di radice p i, si ha: – y K(p 0 ), y < k1 – y K(p i ), k i y < k i+1, i = 1,..., j - 1 – y K(p j ), y k j – ogni k i, per i = 1,..., j è lelemento minimo di K(p i )

47 47 B+-alberi

48 48 B+-alberi Esempio di B+-albero di ordine 5

49 49 B+-alberi: confronto con B-alberi HP: parità di dimensione dei nodi la ricerca di una singola chiave è più costosa in media in un B+-albero (si deve necessariamente raggiungere sempre la foglia per ottenere il puntatore ai dati) per operazioni che richiedono il reperimento dei record ordinati in base al valore della chiave o per intervalli di chiave i B+- alberi sono da preferirsi (il collegamento a lista delle foglie elimina la necessità di accedere ai nodi ad altri livelli) il B-albero è più conveniente per quanto riguarda loccupazione di memoria (le chiavi sono memorizzate una volta sola)

50 50 Organizzazioni hash Le organizzazioni hash sono usate principalmente per lorganizzazione primaria dei dati luso di indici ha lo svantaggio che è necessario eseguire la scansione di una struttura dati per localizzare i dati questo perché lassociazione (chiave, indirizzo) è mantenuta in forma esplicita unorganizzazione hash utilizza una funzione hash H che trasforma ogni valore di chiave in un indirizzo per effettuare la ricerca, data una chiave k, si calcola semplicemente H(k)

51 51 Organizzazioni hash Ogni indirizzo generato dalla funzione hash individua una pagina logica, o bucket il numero di elementi che possono essere allocati nello stesso bucket determina la capacità c dei bucket se una chiave viene assegnata a un bucket che già contiene c chiavi si ha un trabocco (overflow) la presenza di overflow può richiedere luso di unarea di memoria separata, detta area di overflow larea di memoria costituita dai bucket indirizzabili dalla funzione hash è detta area primaria

52 52 Organizzazioni hash … M-1 h key h(key) mod M … … … … area primariaarea di overflow c c

53 53 Organizzazioni hash Una funzione hash genera M indirizzi (0,...,M - 1) tanti quanti sono i bucket dellarea primaria organizzazione statica: il valore di M è costante (il dimensionamento dellarea primaria è parte integrante del progetto dellorganizzazione) organizzazione dinamica: larea primaria si espande e contrae, per adattarsi al volume effettivo dei dati (si usano più funzioni hash) – Hash lineare (non lo vediamo) – Hash estensibile

54 54 Hashing estensibile lhashing estensibile fa uso di una struttura ausiliaria, detta direttorio il direttorio è un insieme di 2 p celle, con indirizzi da 0 a 2 p-1, con p >= 0 profondità del direttorio lespansione dellarea dati avviene aggiungendo una nuova pagina ogni volta che si tenta di inserire un record in una pagina satura

55 55 Hashing estensibile idea: fare uso di una funzione hash che, dato un valore di chiave k i, restituisce non un indirizzo di bucket, ma una stringa binaria di opportuna lunghezza (ad esempio, 32 bit) detta pseudochiave la funzione hash associa ad ogni chiave una pseudochiave di cui si considerano i primi p bit per accedere direttamente ad una delle 2p celle, ognuna contenente un puntatore ad un bucket

56 56 Hashing estensibile: esempio

57 57 Hashing estensibile ogni bucket ha una profondità locale p<=p (mantenuta nel bucket) che indica il numero effettivo di bit usati per allocare le chiavi nel bucket stesso una cella del direttorio contiene il riferimento ad una pagina dellarea dati contenente tutte e sole le registrazioni con pseudochiavi con lo stesso prefisso di lunghezza p

58 58 Hashing estensibile: esempio p=3

59 59 Hashing estensibile per effettuare la ricerca di un record: – si estraggono i primi p bit dalla pseudochiave – si accede lentrata dellindice che corrisponde alla stringa di p bit – dallentrata si determina lindirizzo della pagina del file che contiene il record cercato

60 60 Hashing estensibile per effettuare linserimento di un record: – inizialmente si ha un solo bucket e p = p = 0 – quando si deve inserire un record in una pagina satura di profondità p, se p = p innanzitutto si raddoppia il direttorio e si incrementa p di 1, copiando i valori dei puntatori nelle nuove celle corrispondenti

61 61 Hashing estensibile – sia nel caso p = p che nel caso p < p, si alloca un nuovo bucket e si distribuiscono le chiavi tra i due bucket (quello saturo e quello appena allocato) facendo uso del p+1-esimo bit delle pseudochiavi – per i due bucket si pone a p+1 la profondità locale e si aggiorna il direttorio facendo in modo che una sua cella contenga un riferimento al nuovo bucket

62 62 Esempio 1

63 63 Esempio 2

64 64 Esempio 2 – cont.

65 65 Esempio 3

66 66 Confronto tra indici e hashing se la maggior parte delle interrogazioni ha la forma SELECT A1,A2,......An FROM R WHERE Ai=C la tecnica hash è preferibile infatti: – la scansione di un indice ha un costo proporzionale al logaritmo del numero di valori in R per Ai – in una struttura hash il tempo di ricerca è indipendente dalla dimensione della base di dati

67 67 Confronto tra indici e hashing gli alberi sono preferibili se le interrogazioni usano condizioni di range SELECT A1,A2,......An FROM R WHERE C1 < Ai < C2 è infatti difficile determinare funzioni hash che mantengono lordine

68 68 Definizione di cluster e indici in SQL la maggior parte dei DBMS relazionali fornisce varie primitive che permettono al progettista della base di dati di definire la configurazione fisica dei dati queste primitive sono rese disponibili allutente come comandi del linguaggio SQL non esiste uno standard, ma la sintassi non differisce molto nei vari sistemi per quanto riguarda i comandi principali

69 69 Definizione di cluster e indici in SQL i comandi più importanti sono il comando per la creazione di indici, su una o più colonne di una relazione, e il comando per la creazione di cluster un cluster permette di memorizzare fisicamente contigue le tuple di una o più relazioni che hanno lo stesso valore per una o più colonne, dette colonne del cluster

70 70 Definizione di cluster e indici in SQL il comando per la creazione di un indice in SQL ha il seguente formato: CREATE INDEX Nome Indice ON Nome Relazione(Lista Nomi Colonne) | Nome Cluster [ASC | DESC]; dove – Nome Indice è il nome dellindice che si crea – la clausola ON specifica loggetto su cui è allocato lindice

71 71 Definizione di cluster e indici in SQL Tale oggetto può essere: – una relazione: si devono specificare i nomi delle colonne su cui lindice è allocato – un cluster: lindice viene allocato automaticamente su tutte le colonne del cluster lindice può essere allocato su più colonne – i valori della chiave sono ottenuti come concatenazione di tutti i valori di tali colonne, normalmente esiste un limite al numero di colonne (es. in Oracle 16) le opzioni ASC e DESC specificano se i valori della chiave dellindice devono essere ordinati in modo crescente o decrescente – ASC è il default

72 72 Definizione di cluster e indici in SQL - Esempio Lindice creato è in genere un B+-tree o una sua variante Per allocare un indice sulla colonna stipendio della relazione Impiegati CREATE INDEX idxstipendio ON Impiegati (stipendio);

73 73 Definizione di cluster e indici in SQL Definizione di indici clusterizzati (DB2): CREATE INDEX Nome Indice ON Nome Relazione(Lista Nomi Colonne) CLUSTER; una tabella può avere un solo indice clusterizzato se la tabella è non vuota quando si crea lindice clusterizzato i dati non vengono automaticamente raggruppati (è necessario usare una speciale utility REORG)

74 74 Definizione di cluster e indici in SQL Comando per la creazione di un cluster: CREATE CLUSTER NomeCluster (NomeCol1 Dominio_1,..,NomeColn Dominio_n) [INDEX | HASH IS Expr | HASHKEYS Intero]; NomeCluster è il nome del cluster che si definisce (NomeCol1 Dominio_1,..., NomeColn Dominio_n), con n >= 1, è la specifica delle colonne del cluster – tale insieme di colonne è detto chiave del cluster

75 75 Definizione di cluster e indici in SQL Ogni cluster è sempre associato ad una struttura di accesso ausiliaria – Index: vengono clusterizzate tuple con lo stesso valore per la chiave del cluster e indicizzate tramite un indice di tipo B+-albero (default) conviene se si hanno frequenti interrogazioni di tipo range sulla chiave del cluster o se le relazioni possono aumentare di dimensione in modo impredicibile cluster di tipo index – Hash: vengono clusterizzate le tuple con lo stesso valore di hash per la chiave del cluster e indicizzate tramite una funzione hash conviene se si hanno frequenti interrogazioni con predicati di uguaglianza su tutte le colonne e se le relazioni sono statiche cluster di tipo hash

76 76 Definizione di cluster e indici in SQL - cluster di tipo hash Il DBMS fornisce sempre una funzione hash interna che viene usata come default (spesso basata sul metodo della divisione) lopzione HASHKEYS permette di specificare il numero di valori della funzione hash questo valore (se non è un numero primo) viene arrotondato dal sistema al primo numero primo maggiore tale valore viene usato come argomento delloperazione di modulo usata dal sistema per generare i valori della funzione hash

77 77 Definizione di cluster e indici in SQL - Esempio Cluster di tipo indice: CREATE CLUSTER Personale(D# NUMBER); CREATE INDEX idxpersonnel ON CLUSTER Personale; Cluster di tipo hash: CREATE CLUSTER Personale (D# NUMBER) HASHKEYS 10; dato che lopzione HASHKEYS ha valore 10, il numero di valori generati dalla funzione hash è 11 (primo numero primo > 10)

78 78 Definizione di cluster e indici in SQL - cluster di tipo hash È possibile cambiare la funzione hash da utilizzare tramite lopzione HASH IS questa opzione può tuttavia essere usata solo se: – la chiave del cluster è composta da campi di tipo intero – lespressione deve restituire valori positivi – + altre condizioni

79 79 Definizione di cluster e indici in SQL - cluster di tipo index se il cluster è di tipo index, prima di poter eseguire interrogazioni o modifiche è necessario creare un indice sul cluster tramite il comando di CREATE INDEX un cluster può includere una o più relazioni – singola relazione: il cluster è usato per raggruppare le tuple della relazione aventi lo stesso valore per le colonne che sono chiavi del cluster – più relazioni: il cluster viene usato per raggruppare le tuple di tutte le relazioni aventi lo stesso valore per la chiave del cluster (join efficienti su colonne che sono parte della chiave del cluster) una relazione deve essere inserita nel cluster al momento della creazione

80 80 Definizione di cluster e indici in SQL - Esempio per inserire nel cluster Personale le relazioni Impiegati e Dipartimenti CREATE TABLE Impiegati (Imp# Decimal(4) NOT NULL, Dip# Decimal(2)) CLUSTER personale (Dip#); CREATE TABLE Dipartimenti (Dip# Decimal(4) NOT NULL) CLUSTER personale (Dip#);

81 81 Definizione di cluster e indici in SQL - Esempio i nomi delle colonne delle relazioni su cui si esegue il clustering non devono necessariamente avere lo stesso nome della colonna del cluster, devono però avere lo stesso tipo

82 82 Ottimizzazione delle interrogazioni

83 83 Ottimizzazione di interrogazioni abbiamo visto finora come organizzare i dati in un DB normalmente le decisioni sulle strutture da allocare sono determinate durante la progettazione fisica della base di dati la modifica di tali strutture in seguito può essere costosa quindi quando una interrogazione è presentata al sistema occorre determinare il modo più efficiente per eseguirla usando le strutture disponibili

84 84 Ottimizzazione di interrogazioni nellelaborazione di interrogazioni si trasforma quindi una query in un query plan Esempio: SELECT B,D FROM R,S WHERE R.A = c S.E = 2 R.C=S.C

85 85 Ottimizzazione di interrogazioni RABC S CDE a11010x2 b12020y2 c21030z2 d23540x1 e34550y3

86 86 Ottimizzazione di interrogazioni Risposta: B D 2 x Come eseguiamo tale interrogazione? Una possibile strategia è: – fare il prodotto Cartesiano – selezionare le tuple – effettuare la proiezione

87 87 Ottimizzazione di interrogazioni RXSR.AR.BR.CS.CS.DS.E a x 2 a y 2. C x 2.

88 88 Ottimizzazione di interrogazioni I piani di esecuzione possono essere descritti per mezzo dellalgebra relazionale il piano descritto è B,D [ R.A=c S.E=2 R.C = S.C (RXS)] Piano I B,D R.A =c S.E=2 R.C=S.C X RS

89 89 Ottimizzazione di interrogazioni Altra possibile strategia Piano II B,D R.A = c S.E = 2 R S natural join

90 90 Ottimizzazione di interrogazioni R S A B C ( R ) ( S ) C D E a 1 10 A B C C D E 10 x 2 b 1 20c x 2 20 y 2 c y 2 30 z 2 d z 2 40 x 1 e y 3

91 91 Ottimizzazione di interrogazioni Piano III si utilizzano gli indici R.A e S.C – si usa lindice R.A per selezionare le tuple di R con R.A = c – per ogni valore di R.C trovato si usa lindice su S.C per trovare le tuple che matchano – si eliminano le tuple di S tali che S.E 2 – si concatenano le tuple di R e S risultanti, proiettando su B e D

92 92 Ottimizzazione di interrogazioni R S A B C C D E a x 2 b y 2 c z 2 d x 1 e y 3 AC I1I1 I2I2 =c check=2? output: tupla successiva:

93 93 Ottimizzazione di interrogazioni per interrogazioni complesse esistono più strategie possibili il costo di determinare la strategia ottima può essere elevato il vantaggio in termini di tempo di esecuzione che se ne ricava è tuttavia tale da rendere preferibile eseguire l'ottimizzazione

94 94 Ottimizzazione di interrogazioni Esempio Consideriamo le relazioni Studenti(MatrS,Nome,Ind,AltreInfo) Esami(Corso,MatrS,Voto,Data) Supponiamo di voler trovare il nome degli studenti e la data degli esami per gli studenti che hanno sostenuto BD con 30 SELECT Nome,Data FROM Studenti NATURAL JOIN Esami WHERE Corso ='BD' AND Voto =30

95 95 Ottimizzazione di interrogazioni Consideriamo un database con studenti e esami, di cui 500 di BD e di questi solo 50 con 30 (consideriamo solo la scansione sequenziale delle relazioni) Se si fa il prodotto cartesiano delle due relazioni, si ottiene una relazione temporanea con tuple, da queste si estraggono poi le 50 tuple desiderate (costo proporzionale a accessi) Se si selezionano i 50 esami di BD con 30 e poi si fa il join di questa relazione temporanea con Studenti si ha un costo proporzionale a

96 96 Passi nellesecuzione di uninterrogazione Parsing – Viene controllata la correttezza sintattica della query e ne viene generata una rappresentazione interna (parse tree) Trasformazioni algebriche – La query viene trasformata in una query equivalente ma più efficiente da eseguire (ci si basa sulle proprietà dell'algebra relazionale) – Esempi: eseguire le operazioni di selezione prima possibile evitare join che rappresentano prodotti Cartesiani

97 97 Efficienza - Passi nellesecuzione di uninterrogazione Selezione della strategia – si determina in modo preciso come la query sarà eseguita (per esempio si determina che indici si useranno) – la scelta della strategia è fatta principalmente in base al numero di accessi a disco Esecuzione della strategia scelta – è possibile eseguire alcuni dei passi a tempo di compilazione del programma (DB2 e System R usano questa strategia) o a tempo di esecuzione (Oracle usa questa strategia)

98 98 Passi nellesecuzione di uninterrogazione parse convert apply laws estimate result sizes consider physical plans estimate costs pick best execute {(P1,C1),(P2,C2)...} Pi answer SQL query parse tree logical query plan improved l.q.p. l.q.p. +sizes statistics {P1, P2, …}

99 99 Passi nellesecuzione di uninterrogazione Esempio: query SQL SELECT title FROM StarsIn WHERE starName IN ( SELECT name FROM MovieStar WHERE birthdate LIKE %1960); Trovare i film in cui hanno recitato attori nati nel 1960 Schema: StarsIn(title,year,starName) MovieStar(name, address, gender,birthdate)

100 100 Passi nellesecuzione di uninterrogazione - parse tree SELECT FROM WHERE IN title StarsIn ( ) starName SELECT FROM WHERE LIKE name MovieStar birthDate %1960

101 101 Passi nellesecuzione di uninterrogazione - algebra title StarsIn IN name birthdate LIKE %1960 starName MovieStar

102 102 Passi nellesecuzione di uninterrogazione: logical query plan title starName=name StarsIn name birthdate LIKE %1960 MovieStar

103 103 Passi nellesecuzione di uninterrogazione: improved logical query plan title starName=name StarsIn name birthdate LIKE %1960 MovieStar

104 104 Passi nellesecuzione di uninterrogazione: stima della dimensione del risultato necessità di determinare la dimensione StarsIn MovieStar

105 105 Passi nellesecuzione di uninterrogazione: physical plan Parametri: ordine di esecuzione dei join, dimensione della memoria, attributi su cui si proietta,... Hash join SEQ scanindex scan Parametri: condizione di selezione,... StarsInMovieStar

106 106 Passi nellesecuzione di uninterrogazione: stima dei costi L.Q.P. P1 P2 …. Pn C1 C2 …. Cn Scelta del piano di esecuzione migliore

107 107 Ottimizzazione di interrogazioni Un piano di esecuzione di uninterrogazione consiste quindi in: – un ordine di esecuzione delle varie operazioni relazionali – una strategia per lesecuzione di ogni operazione

108 108 Progettazione fisica

109 109 Dopo la progettazione concettuale e logica dello schema con le metodologie viste, e la definizione del livello esterno (viste) abbiamo gli schemi logico e esterno della base di dati bisogna però ancora scegliere gli indici e decidere le strategie di memorizzazione delle relazioni inoltre gli schemi logici ed esterni ottenuti dalla progettazione possono dover essere rivisti per esigenze legate alle prestazioni

110 110 Progettazione fisica il primo passo per effettuare questa fase di progettazione è capire il workload: – quali sono le query più importanti e con che frequenza vengono eseguite – quali sono gli aggiornamenti più importanti e con che frequenza vengono eseguiti – le prestazioni desiderate/necessarie per tali interrogazioni e aggiornamenti

111 111 Progettazione fisica Per ogni query nel workload bisogna chiedersi: – a quali relazioni accede? – quali attributi ritrova? – quali attributi sono coinvolti in condizioni di selezione/join? quanto selettive saranno queste condizioni? Per ogni update nel workload bisogna chiedersi: – quali attributi sono coinvolti in condizioni di selezione/join? quanto selettive saranno queste condizioni? – il tipo di update ( INSERT/DELETE/UPDATE ) e gli attributi che saranno coinvolti nellaggiornamento

112 112 Progettazione fisica Decisioni da prendere quali indici creare – quali relazioni devono avere indici – su quali attributi – più di un indice per relazione per ogni indice, di che tipo deve essere – clusterizzato? hash/tree? denso/sparso?

113 113 Progettazione fisica Decisioni da prendere bisogna modificare lo schema? (tuning schema logico) – si può decidere di scegliere uno schema in 3NF piuttosto che in BCNF – il workload può influenzare le scelte fatte nello scomporre una relazione in 3NF o BCNF (seguire schemi di normalizzazione alternativi) – si può scomporre ulteriormente uno schema BCNF – si può denormalizzare (cioè disfare un passo di normalizzazione), o si possono aggiungere campi ad una relazione – si può effettuare una scomposizione orizzontale

114 114 Progettazione fisica Decisioni da prendere Bisogna modificare le interrogazioni? (tuning delle interrogazioni) se uninterrogazione è più lenta di quel che ci si aspetta bisogna controllare se le statistiche sono troppo vecchie a volte più succedere che il DBMS non stia eseguendo il piano che si pensa - tipicamente questo succede per: – selezioni che coinvolgono valori nulli – selezioni che coinvolgono espressioni aritmetiche o su stringhe – selezioni che coinvolgono condizioni in OR – mancanza di caratteristiche quali strategie index-only o alcuni metodi di join o stima inesatta delle dimensioni si deve controllare quale piano viene effettivamente utilizzato e aggiustare la scelta degli indici o riscrivere linterrogazione

115 115 Progettazione fisica Scelta degli indici Un possibile approccio è: – si considerano una alla volta le query più importanti – si considera il piano di esecuzione migliore utilizzando gli indici attualmente disponibili – se con un indice addizionale si avrebbe un piano di esecuzione migliore, lo si aggiunge prima di creare un indice, però, bisogna anche considerare limpatto degli aggiornamenti sul workload! trade-off: – gli indici possono velocizzare le query ma rallentare gli aggiornamenti – inoltre richiedono spazio su disco

116 116 Progettazione fisica Scelta degli indici gli attributi che appaiono in una clausola WHERE sono candidati come chiavi per un indice – se la condizione è di uguaglianza può essere meglio un indice hash – se la condizione è di tipo range si preferisce un indice ad albero – la clusterizzazione su tale attributo è particolarmente utile in caso di query tipo range, ma può essere utile anche per luguaglianza se ci sono duplicati bisogna cercare di scegliere indici che siano utilizzabili nel maggior numero possibili di query un solo indice per relazione può essere clusterizzato, per sceglierlo ci si basa sulle interrogazioni importanti che trarrebbero maggior vantaggio dalla clusterizzazione

117 117 Progettazione fisica Scelta degli indici se la clausola WHERE di uninterrogazione importante contiene diverse condizioni si considerano anche indici con chiave multi-attributo – se si hanno selezioni di tipo range, lordine degli attributi deve essere scelto attentamente in modo da corrispondere a quello del range – si noti anche che questo tipo di indici a volte permettono strategie index-only per query importanti si noti anche che per le strategie index-only, il clustering non è importante!

118 118 Progettazione fisica Esempio un indice hash su D.dname permette la selezione di Toy – non serve quindi un indice su D.dno un indice hash su E.dno permette di ritrovare le tuple di Emp che matchano per ogni tupla di Dept selezionata se la clausola WHERE includesse:... AND E.age=25? – si potrebbero ritrovare le tuple di Emp usando lindice su E.age, e poi effettuare il join cercando le tuple di Dept che soddisfano la condizione su dname (analogo alla strategia utilizzando lindice su E.dno) – se si ha già un indice su E.age, questa query non motiva laggiunta di un indice su E.dno SELECT E.ename, D.mgr FROM Emp E, Dept D WHERE D.dname=Toy AND E.dno=D.dno

119 119 Progettazione fisica Esempio Visto che le selezioni sono su Emp, si parte da li a valutare linterrogazione – potrebbe essere utile un indice hash su D.dno che indici si dovrebbero costruire su Emp? – si potrebbe usare un indice di tipo B+ tree su E.sal O un indice su E.hobby – uno solo di tali indici è necessario e qual è meglio dipende dalla selettività delle condizioni in generale (ma non è detto!), le selezioni con uguaglianza sono più selettive di quelle di tipo range si noti come la scelta degli indici sia guidata dai piani che ci aspettiamo che lottimizzatore considerà per la query bisogna avere chiaro come funzionano gli ottimizzatori! SELECT E.ename, D.mgr FROM Emp E, Dept D WHERE E.sal BETWEEN AND AND E.hobby=Stamps AND E.dno=D.dno

120 120 Progettazione fisica Clustering si può usare un indice di tipo B+ tree su E.age – quanto selettiva è la condizione? – lindice è clusterizzato? interrogazione con GROUP BY – se molte tuple hanno E.age > 10, luso dellindice su E.age seguito dallordinamento delle tuple ritrovate può essere costoso – un indice clusterizzato su E.dno può essere meglio query di uguaglianza con duplicati: – è vantaggioso clusterizzare su E.hobby SELECT E.dno FROM Emp E WHERE E.age>40 SELECT E.dno, COUNT (*) FROM Emp E WHERE E.age>10 GROUP BY E.dno SELECT E.dno FROM Emp E WHERE E.hobby=Stamps

121 121 Progettazione fisica Indici multi-attributo per ritrovare record di Emp con age=30 AND sal=4000, un indice su è meglio di un indice su age o un indice su sal – tali indici sono anche detti indici compositi o concatenati – la scelta della chiave dellindice è ortogonale al clustering etc. se la condizione è: 20

122 122 Progettazione fisica Piani Index-Only un certo numero di query può essere risolto senza ritrovare tuple da una o più delle relazioni coinvolte se è disponibile un indice opportuno SELECT D.mgr FROM Dept D, Emp E WHERE D.dno=E.dno SELECT E.dno, COUNT (*) FROM Emp E GROUP BY E.dno SELECT E.dno, MIN (E.sal) FROM Emp E GROUP BY E.dno SELECT AVG (E.sal) FROM Emp E WHERE E.age=25 AND E.sal BETWEEN 3000 AND 5000 (ad albero) o (ad albero)

123 123 Riferimenti Raghu Ramakrishnan, Johannes Gehrke Database Management Systems - Second Edition McGraw Hill, 2000 Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom Database System Implementation Prentice Hall, 2000


Scaricare ppt "1 Architettura di un DBMS Un DBMS deve garantire una gestione dei dati: – efficiente – concorrente – affidabile – integra – sicura (protetta) Ciascuno."

Presentazioni simili


Annunci Google