La durability Basi di dati: Architetture e linee di evoluzione - Seconda edizione Capitolo 2 Appunti dalle lezioni Durability (Persistenza) I dati modificati da una transazione che ha fatto il commit non devono mai essere persi. La durability consente di reagire a: Guasti di Dispositivo Il dispositivo su cui è memorizzato il DB si è danneggiato. Abort di transazione Guasti di Sistema Il server ha subito un guasto/malfunzionamento che non ha danneggiato il dispositivo su cui è memorizzato il DB. Basi di Dati 2 Prof. Antonio d Acierno Durability 2
Durability Lasciamo un attimo da parte i guasti di dispositivo. Perché I guasti di sistema Gli errori di transazioni? creano problemi? Ricordiamoci del buffer manager: Le modifiche apportate dalle transazioni non sempre sono immediatamente riportate sul disco Anzi: Il buffer manager può scrivere le pagine in maniera asincrona rispetto alle transazioni. Basi di Dati 2 Prof. Antonio d Acierno Durability 3 Buffer manager Steal Una pagina assegnata a una transazione ancora attiva può essere assegnata ad un altra transazione. Ciò significa che una pagina modificata da una transazione che non ha ancora fatto il commit viene scritta sul disco No-Steal Una pagina assegnata ad una transazione che non ha ancora finito non può essere assegnata ad un altra transazione. Basi di Dati 2 Prof. Antonio d Acierno Durability 4
Buffer manager Force Al commit di una transazione le pagine modificate sono scritte sul disco. No-Force La scrittura è ritardata a dopo il commit Non significa immediatamente dopo La politica steal/no-steal definisce l istante minimo di scrittura di una pagina su disco La politica force/no-force definisce se esiste un momento preciso Basi di Dati 2 Prof. Antonio d Acierno Durability 5 4 situazioni possibili Steal/No-Force Undo/Redo Steal/Force Undo/No-redo No-Steal/No-Force No-undo/Redo No-Steal/Force No-undo/No-redo Basi di Dati 2 Prof. Antonio d Acierno Durability 6
Log File La persistenza è assicurata tramite il file di Log. Il Log file è un file sequenziale memorizzato su memoria stabile. Deve essere memorizzato su un dispositivo diverso rispetto al DB. In esso esistono due tipi di di record: Record di Transazione. Record di Sistema. Basi di Dati 2 Prof. Antonio d Acierno Durability 7 Record di transazione Registrano le attività di ogni transazione, nell ordine in cui dette attività sono eseguite. Ad ogni transazione è allora assegnato un identificativo. Record di Begin, Commit, Abort: Contengono l identificativo della transazione ed il tipo di operazione. Basi di Dati 2 Prof. Antonio d Acierno Durability 8
Record di transazione Record di Update: L identificativo della transazione l identificativo dell oggetto su cui si effettua l update lo stato prima dell update (BS) lo stato dopo l update (AS). Record di Insert Non hanno la parte BS. Record di Delete Non hanno la parte AS Basi di Dati 2 Prof. Antonio d Acierno Durability 9 UNDO/REDO UNDO Update X=BS Insert Delete X Delete Insert X con valore BS Basi di Dati 2 Prof. Antonio d Acierno Durability 10
UNDO/REDO REDO Update X=AS Insert Insert X al valore AS Delete Delete X Basi di Dati 2 Prof. Antonio d Acierno Durability 11 UNDO/REDO R i = (T,X,U,BS,AS) Idempotenza di UNDO: Undo(R i ) = Undo(Undo(R i )) Idempotenza di REDO: Redo(R i ) = Redo(Redo(R i )) Analogamente per Delete e Insert Basi di Dati 2 Prof. Antonio d Acierno Durability 12
Record di Sistema Record di dump: Segnale che è stato effettuato un dump (copia di sicurezza su memoria stabile) del DB. Record di checkpoint: Il checkpoint è una operazione che viene effettuata con una certa frequenza da un DBMS. Basi di Dati 2 Prof. Antonio d Acierno Durability 13 Checkpoint E una operazione che serve a fare il punto della situazione a chiudere i conti Le pagine nel buffer e i blocchi sono allineati in maniera intelligente Pagine su cui hanno lavorato solo transazioni andate in abort vengono scartate Pagine su cui hanno lavorato solo transazioni che hanno fatto il commit sono scritte Alla fine viene scritto il record di checkpoint in cui si riportano le transazioni attive a quell istante. Basi di Dati 2 Prof. Antonio d Acierno Durability 14
File log generico dump B(T1) B(T2) CK C(T2) B(T3) CK Crash U(T2, ) U(T2, ) U(T1, ) U(T1, ) U(T3, ) U(T3, ) Basi di Dati 2 Prof. Antonio d Acierno Durability 15 Ripresa a Caldo Viene effettuato, ad esempio, in risposta ad un guasto di sistema. 1. Si accede all ultimo blocco del log e si ripercorre il file all indietro fino all ultimo record di checkpoint. Al record di checkpoint le pagine modificate sono state portate sul disco. Basi di Dati 2 Prof. Antonio d Acierno Durability 16
Ripresa a Caldo Si costruiscono due insiemi: Undo e Redo. L insieme di Redo è inizialmente vuoto. L insieme di Undo contiene le transazioni presenti nel record di checkpoint. 2 Si ripercorre il log in avanti: Se si incontra un Commit, la transazione corrispondente viene spostata da Undo in Redo. Se si incontra un Begin, la transazione corrispondente viene inserita nell insieme di Undo. Quando arriviamo all ultimo record scritto sappiamo quello che deve essere disfatto e quello che deve essere rifatto. Basi di Dati 2 Prof. Antonio d Acierno Durability 17 Ripresa a Caldo 3 Si ripercorre il Log all indietro Disfacendo le operazione delle transazioni in UNDO Fino al Begin della transazione più vecchia fra tutte quelle presenti nei 2 insiemi 4 Si ripercorre il Log in avanti rifacendo le operazioni delle transazioni in Redo Basi di Dati 2 Prof. Antonio d Acierno Durability 18
Esempio di ripresa a caldo B(T1) B(T2) U(T2, O1, B1, A1) I(T1, O2, A2) B(T3) C(T1) B(T4) U(T3,O2,B3,A3) U(T4,O3,B4,A4) CK(T2,T3,T4) C(T4) B(T5) U(T3,O3,B5,A5) U(T5,O4,B6,A6) D(T3,O5,B7) A(T3) C(T5) I(T2,O6,A8) T1 T2 T3 T4 T5 C CK UNDO = {T2,T3,T4} C A Crash Basi di Dati 2 Prof. Antonio d Acierno Durability 19 Esempio di ripresa a caldo: fase 1 B(T1) B(T2) U(T2, O1, B1, A1) I(T1, O2, A2) B(T3) C(T1) B(T4) U(T3,O2,B3,A3) U(T4,O3,B4,A4) CK(T2,T3,T4) C(T4) B(T5) U(T3,O3,B5,A5) U(T5,O4,B6,A6) D(T3,O5,B7) A(T3) C(T5) I(T2,O6,A8) UNDO = {T2,T3,T4} REDO = {} Basi di Dati 2 Prof. Antonio d Acierno Durability 20
Esempio di ripresa a caldo: fase 2 B(T1) B(T2) U(T2, O1, B1, A1) I(T1, O2, A2) B(T3) C(T1) B(T4) U(T3,O2,B3,A3) U(T4,O3,B4,A4) CK(T2,T3,T4) C(T4) B(T5) U(T3,O3,B5,A5) U(T5,O4,B6,A6) D(T3,O5,B7) A(T3) C(T5) I(T2,O6,A8) UNDO = {T2,T3,T4} REDO = {} C(T4) UNDO = {T2,T3} REDO = {T4} B(T5) UNDO = {T2,T3,T5} REDO = {T4} C(T5) UNDO = {T2,T3} REDO = {T4, T5} Basi di Dati 2 Prof. Antonio d Acierno Durability 21 Esempio di ripresa a caldo: fase 3 B(T1) B(T2) U(T2, O1, B1, A1) I(T1, O2, A2) B(T3) C(T1) B(T4) U(T3,O2,B3,A3) U(T4,O3,B4,A4) CK(T2,T3,T4) C(T4) B(T5) U(T3,O3,B5,A5) U(T5,O4,B6,A6) D(T3,O5,B7) A(T3) C(T5) I(T2,O6,A8) UNDO = {T2,T3} REDO = {T4, T5} D(O6) I(O5 =B7) O3 = B5 O2 =B3 O1=B1 Basi di Dati 2 Prof. Antonio d Acierno Durability 22
Esempio di ripresa a caldo: fase 4 B(T1) B(T2) U(T2, O1, B1, A1) I(T1, O2, A2) B(T3) C(T1) B(T4) U(T3,O2,B3,A3) U(T4,O3,B4,A4) CK(T2,T3,T4) C(T4) B(T5) U(T3,O3,B5,A5) U(T5,O4,B6,A6) D(T3,O5,B7) A(T3) C(T5) I(T2,O6,A8) UNDO = {T2,T3} REDO = {T4, T5} O3 = A4 O4 = A6 Basi di Dati 2 Prof. Antonio d Acierno Durability 23 Ripresa a Freddo Viene effettuato in risposta ad un guasto di dispositivo. Si ripristina il DB con l ultima copia. Si percorre il log in avanti, dall ultimo dump, rifacendo tutte le operazioni riportate. Si effettua una ripresa a caldo. Basi di Dati 2 Prof. Antonio d Acierno Durability 24
Durability Guasto Funzionamento Normale Stop Ripresa KO Ripresa OK Boot Ripristino E quindi essenziale l idempotenza delle operazioni di ripristino Basi di Dati 2 Prof. Antonio d Acierno Durability 25 WAL e Commit Precedenza Il corretto funzionamento del meccanismo presuppone che: La parte BS sia scritta nel Log prima di effettuare modifiche (WAL-Write Ahead Log). La parte AS sia scritta prima del Commit (Commit Precedenza) In genere il record è scritto in un colpo solo prima di effettuare modifiche sulla Base Dati (WAL semplificata) e prima del Commit (Commit Precedenza semplificata). Basi di Dati 2 Prof. Antonio d Acierno Durability 26
Tempificazione delle scritture B(T) U(T,X,BS,AS) U(T,Y,BS,AS) C Scritture nel log t w(x) w(y) Scritture nella base di dati (a) B(T) U(T,X,BS,AS) U(T,Y,BS,AS) C t w(y) w(x) (b) B(T) U(T,X,BS,AS) U(T,Y,BS,AS) C t w(x) w(y) (c) Basi di Dati 2 Prof. Antonio d Acierno Durability 27