Memorizzazione dei dati: Dischi e File Query\update Query plan Execution Engine richieste di indici, record e file Index/file/record Manager comandi su pagine Query Compiler Buffer Manager Lettura/scrittura pagine Storage Manager Architettura di un DBMS Utente/Applicazione metadati, statistiche metadati, indici, statistiche transazioni Transaction Manager Logging/Recovery pagine di log buffers Amministratore Comandi DDL Concurrency control Lock Table DDL Compiler metadati dischi 2
Dischi e File Un DBMS memorizza informazioni sui dischi READ: trasferisce i dati dal disco alla RAM WRITE: trasferisce i dati dalla RAM al disco Entrambe sono operazioni costose (rispetto alle operazioni in RAM) e quindi vanno pianificate attentamente 3 Perché non salvare tutto nella RAM? Costo: con circa 80 si acquistano 256 MB di RAM o 20 GB di hard disk Volatilità : la RAM è volatile; vorremmo salvare i dati tra una sessione e l altra in modo permanente Tipica gerarchia di storage: - RAM: per i dati correntemente usati (storage primario) - Dischi: per il database principale (storage secondario) - Nastri: per archiviare le vecchie versioni dei dati (storage terziario) 4
Disco È il dispositivo usato per la memoria secondaria Principale vantaggio rispetto ai nastri: accesso random contro accesso sequenziale I dati sono salvati e recuperati in unità chiamate pagine (o blocchi di disco) A differenza della RAM, il tempo per recuperare una pagina varia in funzione della sua posizione nel disco Quindi la disposizione delle pagine sul disco ha un grande impatto sulle prestazioni del DBMS 5 Componenti di un disco I piatti ruotano (90 rps, circa) Il braccio è mosso verso l interno o verso l esterno per posizionare la testina sulla traccia desiderata La testina legge o scrive i dati dal/sul piatto La dimensione del blocco è un multiplo della dimensione del settore 6
Accedere ad una pagina Tempo per accedere (read/write) un blocco di disco: - tempo di seek: muovere il braccio per posizionare la testina sul disco - ritardo di rotazione: aspettare che il disco ruoti sotto la testina - tempo di trasferimento: READ/WRITE i dati dalla superficie del disco Il tempo di seek e il ritardo di rotazione sono dominanti Il tempo di seek varia da 1 a 20 msec Il ritardo di rotazione varia tra 0 e 10 msec Il transfer rate è circa 1 msec per pagine di 4KB (circa 4MB per secondo) Abbassare i costi di I/O: ridurre il tempo di seek e i ritardi di rotazione. Le soluzioni sono sia hardware sia software 7 Disporre pagine sul disco Pagina = Blocco Blocchi vicini : - Blocchi sulla stessa traccia - Blocchi sullo stesso cilindro - Blocchi su cilindri adiacenti I blocchi di un file dovrebbero essere disposti sequenzialmente sul disco (su blocchi vicini ) per minimizzare il tempo di seek e il ritardo rotazionale Per uno scan sequenziale il pre-fetch di alcuni blocchi è vantaggioso 8
Redundant Arrays of Inexpensive/Indipendent Disks (RAID) Il disco è un collo di bottiglia per le prestazioni e l affidabilità del DBMS: lento rispetto alla RAM ed alla CPU, contiene parti meccaniche che si possono rompere Usare array di dischi per aumentare performance ed affidabilità Per incrementare la performance: Fare data striping: i dati vengono partizionati (es. memorizzare i bit che compongono un byte su più dischi). Le partizioni vengono distribuite su dischi differenti Per incrementare l affidabilità: Aggiungere ridondanza: L informazione ridondante opportunamente organizzata su più dischi permette la ricostruzione dei dati in caso di danneggiamento di un disco Un array con queste carateristiche si chiama RAID (Redundant Arrays of Inexpensive/Independent Disks ) 9 Data Striping I dati vengono partizionati in segmenti di uguale lunghezza e scritti su dischi differenti. La grandezza della partizione si chiama unità di striping. Le partizioni vengono solitamente distribuite fra i dischi usando un algoritmo round robin Quando la dimensione dei dati richiesti è superiore ad una unità di striping, tali dati sono distribuiti su più dischi e possono essere letti in parallelo aumentando le prestazioni del sistema Esempio 1: unità di striping 1 bit. Array con D dischi. Sequenze di dati lunghe D bit o più necessitano di tutti i dischi Esempio 2: unità di striping 1 blocco. Richieste di I/O lunghe al più un blocco gestite da un disco 10
Ridondanza Tanti dischi vuol dire più guasti: se il tempo medio tra guasti di un disco è 5 anni, per un array di 100 dischi è di 21 giorni (5 anni/100) Soluzione: aggiungere ridondanza per ricostruire l informazione sul disco guasto. Ad esempio, disco di check contenente informazioni sui dati contenuti nell array Schema di parità su bit: i-esimo bit del disco di check uguale 1 se: i-esimo bit disco 1+ + i-esimo bit disco D = 1 i-esimo bit del disco di check uguale 0 se: i-esimo bit disco 1+ + i-esimo bit disco D = 0 11 Livelli RAID 7 livelli con ridondanza e affidabilità crescenti: 0: data striping (senza ridondanza) 1: data mirroring 0+1: data striping e mirroring 2: codici 1-correttori 3: schema di parità su bit 4: schema di parità su blocco 5: schema di parità su blocco distribuita 6: codici 2-correttori 12
Livello 0 Senza ridondanza: Dati distribuiti sui dischi con una tecnica di data striping Nessuna informazione addizionale (es. parità) viene immagazzinata L affidabilità di grandi array diventa un problema 13 Livello 1 Data mirroring: Ogni disco viene duplicato Non viene utilizzato data striping La lettura di blocchi può essere parallelizzata: un blocco letto dal disco originale ed un bolcco letto dal disco mirror È la soluzione più costosa 14
Livello 0+1 Data striping e mirroring: Simile al livello 1 Unità di striping: blocco Si può parallelizzare la lettura dei blocchi dai dischi originali e dai dischi mirror In più, lettura di blocchi contigui velocizzata dal data striping 15 Livello 2 Codici 1-correttori: Unità di striping: bit Ridondanza: codice correttore (es. Hamming) che identifica il bit rovinato ed il disco dove risiede Buona soluzione per grandi richieste di I/O (dal momento che l unità di trasferimento dal disco è il blocco) La scrittura di un bit implica la modifica dei dati ridondanti sui dischi di check (ciclo read-modify-write): Leggere il bit in RAM Modificare il bit Calcolare i bit ridondanti con il codice correttore Scriverli sui dischi di check 16
Livello 3 Schema di parità su bit: Unità di striping: bit I codici correttori del livello 2 occupano molto spazio. Per identificare il disco guasto usare i controller dei dischi. Per identificare il bit danneggiato usare lo schema di parità su bit: i-esimo bit del disco di check (bit di parità) uguale 1 se i-esimo bit disco 1+ + i-esimo bit disco D = 1 i-esimo bit del disco di check uguale 0 se i-esimo bit disco 1+ + i-esimo bit disco D = 0 Necessario solo un disco di check 17 Livello 4 Schema di parità su blocco: Unità di striping: blocco La scrittura di un blocco richiede la modifica del corrispondente blocco di parità Per scrivere un blocco è quindi necessaria la lettura del blocco dal disco che lo contiene, la lettura del blocco di parità dal disco di check ed una scrittura sul disco di check (ciclo read-modify-write): la nuova parità è calcolabile dai vecchi dati e dalla vecchia parità Necessario solo un disco di check 18
Livello 5 Schema di parità su blocco distribuito: Unità di striping: blocco I blocchi di parità sono distribuiti sui dischi di dati I/O sui blocchi di parità può essere parallelizzato Buone prestazioni per grandi richieste di I/O La scrittura di un blocco dati richiede un ciclo read-modify-write (costoso per piccole richieste) 19 Livello 6 Codici 2-correttori: Uso di codici correttori più sofisticati (es. Reed-Solomon) per il rilevamento di due errori simultanei in grandi array di dischi Esempio: un disco si guasta durante il recovery di un altro disco Blocchi di check distribuiti sui dischi dei dati Numero dei blocchi di check maggiore rispetto ai livelli inferiori 20
Quale livello scegliere? Se la perdita di dati non è un problema, livello 0 migliora le prestazioni Per piccoli sistemi di storage con mirroring di costo limitato, livello 0+1 migliore del livello 1. Adatto anche per sistemi con molti aggiornamenti (non esiste informazione ridondante da aggiornare) Livelli 2 e 4: prestazioni inferiori rispettivamente ai livelli 3 e 5. Livello 3 adatto per grosse letture di blocchi contigui Livello 5: buona soluzione general purpose Livello 6: necessario per sistemi dove la perdita dei dati è critica 21 Gestione dello spazio su disco Storage Manager: gestisce lo spazio su disco, leggendo e scrivendo pagine (blocchi) Buffer Manager: scrive pagine dal disco alla RAM (e viceversa), seguendo una politica di rimpiazzamento. Gli strati più alti del DBMS vi fanno riferimento per: - allocare/deallocare una pagina - leggere/scrivere una pagina Una richiesta per una sequenza di pagine deve essere soddisfatta allocando sequenzialmente le pagine sul disco Gli strati alti non hanno bisogno di sapere come questo viene fatto, né come viene gestito lo spazio libero 22
DBMS vs. Sistemi Operativi Perché non lasciare la gestione dello spazio dei dischi e dei buffer al sistema operativo? - DBMS possono prevedere l ordine in cui le pagine verranno accedute e conviene usare questa proprietà - Ci sono molti sistemi operativi: problemi di portabilità Limitazioni: i file non possono essere più grandi dei dischi 23 Gestione della RAM in un DBMS Buffer manager: software responsabile della scelta delle pagine lette dal disco alla RAM (buffer pool) Buffer pool: parte della RAM divisa in frame 1 frame contiene 1 pagina Per ogni frame nel buffer pool: Pin count: numero di richieste della pagina contenuta nel frame (0 all inizio) Dirty bit: variabile booleana messa a 1 se la pagina è stata modificata (0 all inizio) 24
Azioni svolte alla richiesta di una pagina Se una pagina non è nel buffer pool: - scegliere un frame da rimpiazzare - se il dirty bit=1 (pagina modificata) scrivere su disco la pagina contenuta nel frame - scrivere la pagina richiesta nel frame scelto, incrementare il suo pin count N.B. Se le richieste possono essere previste (es. scan sequenziale) si può fare un pre-fetch di parecchie pagine 25 Rimpiazzamento dei Frame Come scegliere il frame da rimpiazzare? - Il buffer manager deve aspettare che una delle pagine contenute nei frame del buffer pool non sia utilizzata: il pin count di almeno un frame deve essere 0. - Se più frame hanno pin count = 0 allora la scelta del frame dipende da una politica di rimpiazzamento 26
Politiche di rimpiazzamento Obiettivo ideale: rimpiazzare la pagina che verrà richiesta il minimo possibile nel futuro Soluzione: sequenza delle pagine recentemente richieste come approssimazione delle richieste future Least Recently Used (LRU): rimpiazzare la pagina meno usata recentemente (usato in molti sistemi operativi) Most Recently Used (MRU): rimpiazzare la pagina più usata recentemente Clock: rimpiazzare la pagina del primo frame disponibile, poi del secondo, poi del terzo, e così via. 27 Quale politica è la migliore? Un DBMS può prevedere meglio di un sistema operativo quali pagine verranno richieste Ipotesi utilizzando LRU: con un buffer di 10 frame e dovendo leggere ripetutamente 11 pagine, ogni nuova richiesta implica una lettura da disco! Pagine meno richieste nell immediato futuro = Pagine appena richieste Scelta migliore: MRU 28
Record Pagine o blocchi vanno bene quando si tratta di fare I/O ma i livelli più alti di un DBMS lavorano con il concetto di record Record = lista di campi Un record è identificato da Record id: rid = <page id, posizione all interno della pagina> Possibili diverse implementazioni 29 Formato dei Record: lunghezza fissa Tutti i record hanno lo stesso numero di campi Tutti i campi dello stesso tipo hanno la stessa lunghezza La lunghezza dei vari campi viene memorizzata nel system catalog 30
Formato dei Record: lunghezza variabile Due formati alternativi (numero fisso di campi). Il secondo offre accesso diretto ai campi e efficiente immagazzinamento dei valori nulli 31 Formato delle Pagine: Record a lunghezza fissa Come disporre i record in una pagina? Record Id = <page id, posizione nella pagina> Ma muovere i record per la gestione dello spazio libero cambia i rid. Potrebbe non essere accettabile 32
Formato delle Pagine: Record a lunghezza variabile Per ogni slot della directory: (record pointer, record length) Si possono spostare i record senza cambiare i rid. Quindi, è una soluzione attraente anche per i record a lunghezza fissa 33 File di Record Altro concetto fondamentale per un DBMS FILE: collezione di pagine, ognuna contenente una collezione di record Un file deve supportare: - insert / delete / modify record - read (specificato dal rid) - scan di tutti i record (possibilmente, con qualche condizione sui record da restituire) 34
Heap File È la più semplice struttura di file. Contiene record senza alcun particolare ordine Le pagine vengono allocate e deallocate mano a mano che il file aumenta o diminuisce la sua dimensione Per supportare operazioni sui record, si deve: - tenere traccia delle pagine del file - tenere traccia dello spazio libero sulle pagine - tenere traccia dei record in una pagina Implementabile in molti modi 35 Heap File implementato come Lista Il DBMS memorizza lo id della pagina header ed il nome del file Ogni pagina contiene due puntatori oltre ai dati Svantaggi: - Difficile che una pagina sia del tutto piena: quasi tutte le pagine stanno nella lista in basso - L inserimento di un record richiede la lettura di molte pagine 36
Heap File implementato come Directory Page La directory è una collezione di pagine. Ogni pagina ha molti puntatori verso le pagine con i record. Il DBMS ha salvato lo id della prima pagina della directory Con il puntatore verso una pagina ci può essere il suo numero di byte liberi L inserimento di un record richiede la lettura di meno pagine rispetto alla lista perché in una pagina vi sono molti puntatori 37 Indici Con un heap file possiamo recuperare record: - specificando il rid, oppure... - facendo uno scan sequenziale di tutti i record Spesso vogliamo recuperare i record in base ai valori contenuti in uno o più campi Gli indici sono strutture di file che permettono di rispondere efficientemente a interrogazioni basate su valori 38
Riassunto I dischi forniscono un immagazzinamento economico e durevole La gestione della memoria è svolta dal DBMS e non dal sistema operativo Il buffer manager sceglie le pagine da portare nella RAM La pagina rimane in RAM finché non è rilasciata dal richiedente ed......è scritta su disco quando il frame è scelto per il rimpiazzamento (che accade dopo il rilascio della pagina da parte del richiedente) La scelta del frame è basata su una politica di rimpiazzamento, spesso più accurata di quella usata dal sistema operativo Gli strati superiori del DBMS vedono i dati organizzati in record e file Diverse implementazioni per record e file Indici: strutture dati per eseguire efficientemente interrogazioni basate sui valori dei dati 39