TRANSAZIONI • Concetto di transazione, comandi di transazione, proprietà ACID delle transazioni • Transazioni concorrenti – – – – – Esecuzione seriale e serializzabile Conflict-equivalenza, grafo dei conflitti Protocollo 2PL e 2PL stretto Protocollo basato su timestamp Lo stallo – – – – Malfunzionamenti, do/undo/redo Il LOG Checkpoint Dump • Gestione dei buffer • Affidabilità F.Cesarini - Basi Dati Distribuite Transazioni 1 TRANSAZIONI • TRANSAZIONE – una singola esecuzione di un programma – una unità di lavoro effettuata da un’applicazione – una unità di lavoro “consistente” e “affidabile” F.Cesarini - Basi Dati Distribuite Transazioni 2 1 Esempio di transazione • ESEMPIO: prenotazione di un volo da P1 a P3 con cambio in P2 1. num. posti disponibili volo P1 P2 -2. num. posti occupati volo P1 P2 ++ 3. num. posti disponibili volo P2 P3 -4. num. posti occupati volo P2 P3 ++ vincolo integrità: occupati + disponibili = k • malfunzionamento tra 1. e 2. • malfunzionamento tra 2. e 3. – dati inconsistenti rispetto al vincolo di integrità – dati consistenti rispetto al vincolo di integrità – dati non corretti F.Cesarini - Basi Dati Distribuite Transazioni 3 Esempio di transazione • ESEMPIO: prenotazione di un volo da P1 a P3 con cambio in P2 Istruzioni in linguaggio macchina ……… 1 a. leggi num 1 b. somma 1 1 c. scrivi num … … ... • esecuzione concorrente da parte di più transazioni di 1a., 1b., 1c. – il valore di num può non essere corretto F.Cesarini - Basi Dati Distribuite Transazioni 4 2 Esecuzione di una transazione database in uno database in uno stato consistente stato consistente il database può essere temporaneamente in uno stato inconsistente inizio transazione fine transazione esecuzione della transazione F.Cesarini - Basi Dati Distribuite Transazioni 5 Esempio-1 di transazione [5] FLIGHT (Fno,Date, Src, Dest, Seatsold, Capacity) CUST (Cname, Addr, Bal) FC (Fno, Date, Cname, Special) Begin_transaction Reservation begin input (flight_no, date, customer_name); EXEC SQL UPDATE FLIGHT SET Seatsold = Seatsold + 1 WHERE Fno = flight_no AND Date = date; EXEC SQL INSERT INTO FC (Fno, Date, Cname, Special) VALUES (flight_no, date, customer_name, NULL); output (“reservation completed”) end Affinché l’esecuzione sia “corretta” devono essere eseguiti ambedue i comandi SQL F.Cesarini - Basi Dati Distribuite Transazioni 6 3 TRANSAZIONI / COMANDI BEGIN TRANSACTION END TRANSACTION COMMIT WORK ROLLBACK WORK • • i comandi begin transaction e end transaction racchiudono le istruzioni che compongono il corpo della transazione il comando commit work segnala al sistema che gli effetti sul database devono essere resi permanenti – deve essere eseguita una operazione di commit • il comando rollback work segnala al sistema che gli effetti delle istruzioni eseguite fino a quel momento devono essere annullati – deve essere eseguita una operazione di abort F.Cesarini - Basi Dati Distribuite Transazioni 7 TRANSAZIONI BEN FORMATE • una transazione è ben formata se – – – – inizia con begin transaction finisce con end transaction esegue commit work o rollback work (o l’uno o l’altro) dopo commit work o rollback work non esegue letture e/o scritture sul database • si può vedere se una transazione è ben formata solo al momento della sua esecuzione • non sempre i comandi visti devono essere scritti esplicitamente dall’utente si noti che l’operazione abort può essere eseguita dal sistema a seguito dell’esecuzione di un rollback work, o può essere decisa dal sistema autonomamente in base alla situazione • F.Cesarini - Basi Dati Distribuite Transazioni 8 4 TRANSAZIONI / COMANDI SQL • • • • • • • commit rollback non esistono begin transaction e end transaction una istruzione SQL è implicitamente la prima istruzione di una transazione (transazione corrente) se non esiste già una transazione corrente i comandi commit e rollback segnalano anche la fine della transazione ogni istruzione SQL che segue un commit o un rollback è la prima istruzione di una nuova transazione il comando set transaction serve ad eventualmente definire le caratteristiche della transazione corrente F.Cesarini - Basi Dati Distribuite Transazioni 9 Esempio-2 di transazione [5] FLIGHT (Fno,Date, Src, Dest, Seatsold, Capacity) CUST (Cname, Addr, Bal) FC (Fno, Date, Cname, Special) Begin_transaction Reservation begin input (flight_no, date, customer_name); EXEC SQL SELECT Seatsold, Capacity INTO temp1, temp2 FROM FLIGHT WHERE Fno = flight_no AND Date = date; if temp1 = temp2 then begin output (“no free seats”); Rollback end else ….. F.Cesarini - Basi Dati Distribuite Transazioni 10 5 Esempio-2 di transazione [5] FLIGHT (Fno,Date, Src, Dest, Seatsold, Capacity) CUST (Cname, Addr, Bal) FC (Fno, Date, Cname, Special) ….. begin EXEC SQL UPDATE FLIGHT SET Seatsold = Seatsold + 1 WHERE Fno = flight_no AND Date = date; EXEC SQL INSERT INTO FC (Fno, Date, Cname, Special) VALUES (flight_no, date, customer_name, NULL); Commit; output (“reservation completed”) end end-if end F.Cesarini - Basi Dati Distribuite Transazioni 11 TRANSAZIONI / PROPRIETA’ proprietà acide delle transazioni • • • • Atomicity Consistency Isolation Durability F.Cesarini - Basi Dati Distribuite ACID atomicità consistenza isolamento persistenza Transazioni 12 6 TRANSAZIONI / ATOMICITA’ • la transazione è una unità di elaborazione indivisibile: tutto o niente • se la transazione esegue un commit tutte le sue modifiche vengono rese permanenti e visibili alle altre transazioni • se la transazione va in abort , è come se non fosse mai iniziata – il sistema deve riportare lo stato del database a quello che si aveva prima dell’inizio della transazione – il sistema deve disfare quello che la transazione ha fatto • l’abort può essere provocato da – esecuzione di un rollback – malfunzionamento che causa l’interruzione della transazione – decisione del sistema ad esempio nel trattamento dello stallo F.Cesarini - Basi Dati Distribuite Transazioni 13 TRANSAZIONI / CONSISTENZA • una transazione non deve violare i vincoli di integrità definiti sul database • i vincoli di integrità possono essere controllati in – modo immediato, dopo ogni aggiornamento – modo differito, al momento del commit • es: inserimenti in tabelle con vincoli di integrità referenziale ciclici – Se i vincoli sono controllati in modo immediato, non è possibile fare nessun inserimento F.Cesarini - Basi Dati Distribuite Transazioni 14 7 TRANSAZIONI / ISOLAMENTO • • • l’esecuzione di una transazione è indipendente dall’esecuzione concorrente di altre transazioni le modifiche fatte da una transazione sulla base di dati sono visibili alle altre transazioni solo dopo che questa ha effettuato il commit esempio di esecuzione concorrente, non isolata di T1 e T2 … … write 1(x) read2(x) commit2 abort1 il dato x letto da T2 non è valido: T2 deve essere disfatta e rifatta F.Cesarini - Basi Dati Distribuite Transazioni 15 TRANSAZIONI / PERSISTENZA • Gli effetti sul database di una transazione andata in commit sono permanenti, non devono andare persi per nessun motivo (es. malfunzionamenti) F.Cesarini - Basi Dati Distribuite Transazioni 16 8 TRANSAZIONI CONCORRENTI T1 T2 r1(x); e1: x=x+100; w1(x); commit1 r2(x); e2: x=x-200; w2(x); commit2 x0: 1000 esecuzione concorrente r1(x) r2(x) e2 e1 w2(x) w1(x) c1 c2 xf: 1100 risultato non corretto esecuzione seriale di transazioni una esecuzione di T={T1, … Tn} è seriale se ∀(Ti, Tj) tutte le operazioni di Ti vengono eseguite prima di Tj o viceversa esecuzione serializzabile di transazioni una esecuzione di T={T1, … Tn} è serializzabile se ha sul DB lo stesso effetto di una esecuzione seriale una esecuzione serializzabile è corretta F.Cesarini - Basi Dati Distribuite Transazioni 17 ESEMPI ESECUZIONE CONCORRENTE T1 T2 T3 r1(x); e1: y=x+1; w1(y); c1 r2(y); e2: z=y+1; w2(z); c2 r3(z); e3: x=z+1; w3(x); c3 x0 = y0 = z0 = 0 esecuzione seriale T1 T2 T3 r1 e1 w1 c1 r2 e2 w2 c2 r3 e3 w3 c3 ⇒ x=3 y=1 z=2 ≡ T1 T3 T2) esecuzione serializzabile (≡ r1 r3 e3 w3 c3 e1 w1 c1 r2 e2 w2 c2 ⇒ x=1 y=1 z=2 esecuzione non serializzabile r2 r1 r3 e2 w2 c2 e1 w1 c1 e3 w3 c3 ⇒ x=1 y=1 z=1 F.Cesarini - Basi Dati Distribuite Transazioni 18 9 ESEMPI ESECUZIONE CONCORRENTE esecuzione seriale T1 T2 r(A) A=A-1 w(A) r(B) B=B+1 w(B) c r(B) B=B-2 w(B) r(C) C=C+2 w(C) c esecuzione serializzabile T1 T2 r(A) A=A-1 r(B) w(A) B=B-2 r(B) w(B) B=B+1 r(C) w(B) c C=C+2 w(C) c esecuzione non serializzabile T1 T2 r(A) A=A-1 w(A) r(B) r(B) B=B-2 B=B+1 w(B) w(B) r(C) c C=C+2 w(C) c T1 legge B prima che T2 l’abbia aggiornato F.Cesarini - Basi Dati Distribuite Transazioni 19 SCHEDULE (STORIA) DI TRANSAZIONI • • consideriamo solo le operazioni: lettura, scrittura, commit, abort nessuna transazione legge o scrive un dato più di una volta l’esecuzione di Ti è un ordinamento su un insieme di operazioni Oi ⊂ {ri(x), wi(x)} ∪ { ci, ai} tale che – solo una delle due operazioni commit o abort è presente – l’ultima operazione è commit o abort Dato T= {T1 … Tn} una storia (schedule) S su T è un ordinamento su un insieme di operazioni O = ∪i O i che rispetta l’ordinamento di ogni Ti F.Cesarini - Basi Dati Distribuite Transazioni 20 10 CONFLICT-EQUIVALENZA DI STORIE • • • • due operazioni p e q sono in conflitto se operano sullo stesso dato e almeno una di esse è una scrittura in questo contesto, consideriamo solo transazioni terminate da un commit (commit-proiezione di storie) due storie S1 e S2 sono conflict-equivalenti se contengono le stesse operazioni e ordinano allo stesso modo operazioni in conflitto una storia è conflict-serializzabile se è conflict-equivalente ad una storia seriale F.Cesarini - Basi Dati Distribuite Transazioni 21 CONFLICT-EQUIVALENZA esempi T1 r1(x) w1(x) w1(y) c1 T2 r2(x) w2(y) c2 T3 r3(x) w3(x) c3 S1 S2 S3 r2(x) r1(x) w1(x) r3(x) w1(y) c1 w2(y) c2 w3(x) c3 r1(x) r2(x) w1(x) r3(x) w3(x) c3 w1(y) w2(y) c2 c1 r2(x) r1(x) w1(x) r3(x) w3(x) c3 w2(y) w1(y) c2 c1 S1 c-equiv S2 S1 non è c-equiv S3 S3 è c-serializzabile S3 è c-equiv storia seriale T2 T1 T3 S1 non è c-serializzabile F.Cesarini - Basi Dati Distribuite Transazioni 22 11 GRAFO DEI CONFLITTI grafo dei conflitti relativo alla storia S: CG(S) – ad ogni transazione corrisponde un nodo ≠j) se e solo se almeno una operazione – si ha un arco Ti → Tj (i≠ di Ti precede e va in conflitto con una operazione di Tj S2 r1(x) r2(x) w1(x) r3(x) w3(x) c3 w1(y) w2(y) c2 c1 T3 T2 S3 r2(x) T1 r1(x) w1(x) r3(x) w3(x) c3 w2(y) w1(y) c2 c1 T3 T2 F.Cesarini - Basi Dati Distribuite T1 Transazioni 23 TEOREMA DI SERIALIZZABILITA’ una storia S è conflict-serializzabile se e solo se il suo grafo dei conflitti è aciclico S2 non è conflict-serializzabile S3 è conflict-serializzabile determinare se un grafo è aciclico ha complessità lineare rispetto al numero dei nodi grafi grandi e dinamici F.Cesarini - Basi Dati Distribuite Transazioni 24 12 CONTROLLO CONCORRENZA: lock vincoli sulle operazioni lettura/scrittura effettuate dalle transazioni: • ogni operazione di lettura deve essere preceduta dalla richiesta read_lock e seguita da read_unlock r_lock(x) … read(x) … r_unlock(x) • ogni operazione di scrittura deve essere preceduta dalla richiesta write_lock e seguita da write_unlock w_lock(x) … write(x) … w_unlock(x) • transazioni che seguono questo protocollo sono ben formate rispetto al locking F.Cesarini - Basi Dati Distribuite Transazioni 25 CONTROLLO CONCORRENZA: lock gestione dei lock: • i lock sono gestiti dal lock manager che tiene traccia dei lock assegnati alle varie transazioni – tabella dei lock: • • • • • • [dato_id, tipo_lock, transazione_id] un r_lock(x) viene accordato solo se non è già stato assegnato un w_lock(x) un w_lock(x) viene accordato solo se nessun tipo di lock su x è già stato assegnato (la risorsa x è libera) se una T ottiene un lock continua la sua esecuzione se una T non ottiene un lock, ne viene sospesa l’esecuzione in attesa di poterlo ottenere una operazione di unlock annulla l’assegnazione del corrispondente lock ad ogni operazione unlock(x) il lock manager controlla se ci sono T in attesa di un lock(x) e se è possibile accordarlo F.Cesarini - Basi Dati Distribuite Transazioni 26 13 PROTOCOLLO 2PL two phase locking una transazione non può ottenere nessun lock dopo aver effettuato un unlock storia 2PL: esecuzione concorrente di transazioni che seguono il protocollo 2PL num. di lock ottenuti t begin F.Cesarini - Basi Dati Distribuite end Transazioni 27 SERIALIZZABILITA’ DELLE STORIE 2PL • il grafo dei conflitti di una storia 2PL è aciclico • una storia 2PL è quindi serializzabile F.Cesarini - Basi Dati Distribuite Transazioni 28 14 PROTOCOLLO A DUE FASI STRETTO strict 2PL • • consideriamo situazioni reali in cui ci possono essere abort il protocollo 2PL non garantisce l’isolamento – w_l1(x) w1(x) w_u1(x) r_l2(x) r2(x) r_u2(x) c2 a1 • protocollo 2PL stretto: una transazione esegue tutti gli unlock solo dopo il commit (abort) num. lock t begin • commit end Il protocollo 2PL stretto limita il grado di concorrenza ma dà l’isolamento F.Cesarini - Basi Dati Distribuite Transazioni 29 CONTR. CONCORRENZA / TIMESTAMP • • ad ogni transazione viene assegnato un timestamp (marca temporale) i timestamp sono ordinati in modo consistente con l’inizio esecuzione delle transazioni – valore dell’orologio, intero progressivo, … • obbiettivo scheduler TS: esecuzione di storie serializzabili equivalenti alla storia seriale corrispondente all’ordinamento dei timestamp • ad ogni dato x vengono associati – max_read(x) – max_write(x) F.Cesarini - Basi Dati Distribuite timestamp più grande delle T che hanno letto x timestamp più grande delle T che hanno scritto x Transazioni 30 15 CONTR. CONCORRENZA / TIMESTAMP gestione richieste lettura e scrittura da parte di T con timestamp ts read(x, ts) write(x, ts) read(x, ts): se se ts<max_write(x) allora T viene abortita ts>max_write(x) allora l’operazione viene accettata e max_read(x) ← max(ts, max_read(x)) write(x, ts): se ts<max_write(x) oppure ts<max_read(x) allora T viene abortita altrimenti l’operazione viene accettata e max_write(x) ← ts gestione corretta nell’ipotesi di commit proiezione (non si ha isolamento) F.Cesarini - Basi Dati Distribuite Transazioni 31 Confronto • • • CS: insieme delle storie conflict-serializzabili 2PL: insieme delle storie ottenibili con il protocollo 2PL TS: insieme delle storie ottenibili con il controllo basato su timestamp CS 2PL F.Cesarini - Basi Dati Distribuite TS Transazioni 32 16 Confronto S: r1(x) w1(x) r2(x) w2(x) r3(y) w1(y) S è conflict-serializzabile, equivalente alla storia seriale T3 T1 T2 S non è 2PL perché T1 ha rilasciato x (altrimenti T2 non avrebbe potuto leggerlo) e poi ha chiesto un lock in scrittura su Y T1 T2 T3 F.Cesarini - Basi Dati Distribuite Transazioni 33 Confronto S: r1(x) w2(x) r3(x) r1(y) w2(y) r1(v) w3(v) r4(v) w4(y) w5(y) ↑_________________↑ ↑ non 2PL S è conflict-serializzabile, equivalente alla storia seriale T1 T2 T3 T4 T5 S è compatibile con il protocollo basato su timestamp S non è 2PL perché T2 ha rilasciato x (altrimenti T3 non avrebbe potuto leggerlo) e poi ha chiesto un lock in scrittura su Y T1 T2 T5 T4 F.Cesarini - Basi Dati Distribuite T3 Transazioni 34 17 Confronto S: r1(x) w1(x) r2(x) w2(x) S è 2PL e anche TS S: r2(x) w2(x) r1(x) w1(x) S è 2PL ma chiaramente non è TS F.Cesarini - Basi Dati Distribuite Transazioni 35 STALLO • • Con i protocolli basati su lock possono verificarsi situazioni di stallo Esempio di stallo r_lk1(x) r_lk2(y) r1(x) r_2(y) w_lk1(y) w_lk2(x) – La transazione T1 chiede un lock in scrittura su y e viene messa in attesa perché y è bloccato da T2 – La transazione T2 chiede un lock in scrittura su x e viene messa in attesa perché x è bloccato da T1 – Nessuna delle due transazioni può andare avanti • • La probabilità che si verifichi uno stallo è bassa ma non nulla In caso di stallo il grafo delle attese presenta un ciclo – T1 attende che T2 rilasci y e T2 attende che T1 rilasci x y T1 T2 x F.Cesarini - Basi Dati Distribuite Transazioni 36 18 Tecniche per lo stallo: timeout • • Viene stabilito un limite per il tempo che una transazione può stare in attesa di un lock, scaduto il timeout viene mandata in abort Importanza della scelta di un intervallo adeguato – Troppo corto: abort non necessario perché in realtà invece di uno stallo si aveva un’attesa “lunga” – Troppo lungo: permanenza del sistema in stallo prima di prendere provvedimenti • • Tecnica semplice Tecnica spesso usata dai DBMS commerciali F.Cesarini - Basi Dati Distribuite Transazioni 37 Tecniche per lo stallo: prevenzione • • Con questo tipo di tecniche si seguono dei protocolli che fanno sì che non possa verificarsi uno stallo Cfr. sistemi operativi: tecniche che impediscono una delle quattro condizioni necessarie per lo stallo – Acquisendo all’inizio tutte le risorse necessarie, si nega la condizione “possesso e attesa” – Con il protocollo che vedremo basato sui timestamp, si impediscono cicli nel grafo delle attese • Tecnica A: richiedere inizialmente tutti i lock necessari – Non è facile da utilizzare perché non sempre le transazioni conoscono a priori tutti i dati che hanno bisogno di bloccare F.Cesarini - Basi Dati Distribuite Transazioni 38 19 • • • Tecniche per lo stallo: prevenzione basata su timestamp Ad ogni T viene assegnato un timestamp, sia i il timestamp assegnato a Ti: Ti aspetta per un dato posseduto da Tj se e solo se i <j , cioè se e solo se Ti è più vecchia di Tj altrimenti Ti viene mandata in abort e fatta ripartire con lo stesso timestamp Delle due transazioni, viene eventualmente mandata in abort la più giovane (si suppone che abbia fatto meno lavoro da disfare) È una tecnica senza preemption (Tj mantiene il dato che ha bloccato) – Ci sono protocolli simili che invece effettuano una preemption • • • Ripartire con lo stesso timestamp “invecchia” la transazione, e impedisce che in caso di conflitto sia sempre quella ad andare in abort Si può facilmente dimostrare che con questa tecnica il grafo delle attese non ha mai cicli (si dimostra per assurdo) Tecnica non usata nei DBMS commerciali: troppi abort F.Cesarini - Basi Dati Distribuite Transazioni 39 Tecniche per lo stallo: rilevamento • Ricerca di un ciclo nel grafo delle attese / Analisi delle tabelle di lock – Es: Lock assegnati a T Transazioni in attesa di lock lock Trans Trans lock r_l(x) Ti Tk r_l(y) w_l(y) Ti Ti w_l(u) w_l(z) Tj r_l(u) Tk Esaminando le due tabelle si può verificare se siamo in stallo o no • Quando effettuare il controllo – Periodicamente – Quando scade un timeout • Tecnica usata da alcuni DBMS commerciali F.Cesarini - Basi Dati Distribuite Transazioni 40 20 GESTIONE DEI BUFFER • • BUFFER: area in memoria centrale spartita tra le transazioni area buffer organizzata in pagine • lettura del dato x da parte della transazione T: – dim. pagina ⇔ dim. blocco I/O disco utilizzato dal sistop – determinazione file e blocco-disco B dove x è memorizzato – controllo se B è in una pagina P di BUFFER • SI: T legge da P • NO: il sistema legge B in una pagina P di BUFFER; T legge da P • scrittura del dato y da parte della transazione T: – determinazione file e blocco-disco B dove y è memorizzato – controllo se B è in una pagina P di BUFFER • SI: T scrive su P • NO: il sistema legge B in una pagina P di BUFFER; T scrive su P – scrittura di P su disco (questa scrittura può essere differita) • numero di pagine è limitato: politica di sostituzione F.Cesarini - Basi Dati Distribuite Transazioni 41 Buffer … read(x) … x: … … x F.Cesarini - Basi Dati Distribuite … write(y) … y: … … buff_1 buff_1 x y buff_k buff_k Transazioni y 42 21 STRUTTURE DEL BUFFER MANAGER • • • tabella allocazione pagine: < pagina-buffer, file, blocco-disco, valida, libera> (file, blocco-disco) ⇔ pagina database Pagina-buffer valida/non valida – valida: pagina in uso ad una transazione – non valida: pagina non in uso ad alcuna transazione – In genere con una richiesta di lettura si ha una pagina in uso ad una transazione, quindi valida; quando la transazione non la usa più, la “rilascia” e diventa non valida • Pagina-buffer libera/non libera – libera: pagina che può essere usata per leggere un nuovo blocco – non libera: pagina che deve essere copiata su disco prima di usarla per leggere un nuovo blocco F.Cesarini - Basi Dati Distribuite Transazioni 43 PRIMITIVE DEL BUFFER MANAGER • Operazione fetch ( o fix, use) • operazione force su pagina P del buffer richiesta da T: – Viene usata per leggere una pagina in un buffer – la pagina P viene copiata su disco e T viene sospesa fino al termine della scrittura • operazione flush (su pag P del buffer) del buffer manager: – la pagina P non più valida, quindi non più usata da una transazione, (e ancora non libera) viene copiata su disco – Questa scrittura è asincrona rispetto all’esecuzione delle transazioni F.Cesarini - Basi Dati Distribuite Transazioni 44 22 POLITICHE GESTIONE PAGINE BUFFER • steal / no-steal – steal: nella sostituzione delle pagine, la vittima può essere anche una pagina valida • prima di essere sostituita deve essere copiata su disco • se la transazione, che aveva in uso la pagina, successivamente va in abort, deve essere ripristinato il valore iniziale della pagina del database – no-steal: nella sostituzione delle pagine la vittima non può essere una pagina valida • force / no-force – force: tutte le pagine attive di una transazione T vengono copiate su disco quando T effettua il commit – no-force: la scrittura delle pagine su disco viene gestita dal buffer manager in modo asincrono rispetto alla transazione (la scrittura può essere effettuata dopo il commit) • DBMS: no-steal/ no-force coppia molto frequente F.Cesarini - Basi Dati Distribuite Transazioni 45 MALFUNZIONAMENTI E AFFIDABILITA’ • fallimento di transazione: nessuna perdita di dati né in memoria centrale né su disco – – – – – – • interruzione da parte dell’utente errore di esecuzione violazione vincoli integrità tentativo accedere a dati protetti situazioni di stallo … fallimento di sistema (guasto di sistema): perdita del contenuto della memoria centrale – anomalia hard/sw con interruzione di tutte le transazioni attive – caduta di tensione – … • disastro / crash (guasto di dispositivo): malfunzionamento che danneggia il disco F.Cesarini - Basi Dati Distribuite Transazioni 46 23 Local Recovery Manager e Buffer Manager Main memory Local Recovery Manager fetch flush Database stabile F.Cesarini - Basi Dati Distribuite read write Database Buffer Manager read write Database Buffers o Database volatile Transazioni 47 AFFIDABILITA’ • il controllo dell’affidabilità garantisce le proprietà di atomicità e persistenza delle transazioni – atomicità: se la transazione va in abort o si ha un guasto di sistema prima del commit, la transazione viene disfatta (undo) – persistenza: se una transazione ha effettuato il commit ma non si è sicuri dei suoi risultati sul database, la transazione viene rifatta (redo) • memoria stabile: resistente ai guasti (non subisce crash) – unità a nastro – disco + unità a nastro – due dischi “a specchio” … • • • • protezione da malfunzionamenti: ridondanza dei dati log (giornale): file su cui vengono registrate le azioni eseguite dalle transazioni checkpoint dump F.Cesarini - Basi Dati Distribuite Transazioni 48 24 DO / UNDO / REDO … <scrittura pag. modificata>; commit ↑ fallimento di transazione DB modificato UNDO DB senza modifiche vecchi valori … commit; … <scrittura pag. modificata> ↑ fallimento di sistema DB senza modifiche REDO DB modificato nuovi valori F.Cesarini - Basi Dati Distribuite Transazioni 49 STRUTTURA DEL LOG • • file sequenziale su memoria stabile in cui vengono registrate le azioni effettuate sul database nell’ordine temporale di esecuzione azioni eseguite dal sistema – dump – checkpoint • azioni eseguite dalle transazioni – – – – Begin (T) Commit (T) Abort (T) Update (T, Object, Before State, After State) Insert (T, Object, After State) Delete (T, Object, Before State) … CK ... B(T 1) … I(T 1,Ox, AS) … C(T 2) … U(T 1, Oy, BS, AS) … C(T 1) … F.Cesarini - Basi Dati Distribuite Transazioni 50 25 USO DEL LOG • undo e redo utilizzano BS e AS (Before State e After State) • idempotenza: undo(azione)=undo(undo(azione)) redo(azione)=redo(redo(azione)) • i record di log vengono scritti sequenzialmente su un buffer che generalmente viene copiato sul file log quando è pieno F.Cesarini - Basi Dati Distribuite Transazioni 51 Logging Main memory fetch flush Database stabile F.Cesarini - Basi Dati Distribuite read write Database Buffer Manager Transazioni te d wr it e LOG buffers Local Recovery Manager wri re a rea d LOG stabile read write Database Buffers o Database volatile 52 26 CHECKPOINT / DUMP • checkpoint: operazione fatta periodicamente dal sistema per limitare la parte di giornale da scandire in caso di malfunzionamenti – rifiuta una nuova operazione di commit – scrive su disco le pagine P del buffer modificate, relative a transazioni che hanno effettuato un commit – scrive nel log un record checkpoint(T1, … Tn) che indica le transazioni attive in quel momento • • dopo un checkpoint le modifiche sul database effettuate in precedenza da transazioni terminate sono sicuramente su disco dump: copia completa del database – – – – – rifiuta l’attivazione di nuove transazioni attende il completamento delle transazioni attive scrive su disco le pagine P del buffer modificate fa una copia del database (backup) scrive nel log un record dump F.Cesarini - Basi Dati Distribuite Transazioni 53 GESTIONE SCRITTURA SUL LOG • regola WAL, Write Ahead LOG: il Before State di un record di log deve essere scritto sul file log (in memoria stabile) prima che la modifica sull’oggetto venga scritta sul database su disco – si è sicuri che quando il nuovo valore viene scritto su disco il vecchio valore sia stato salvato nel log, così si può eventualmente recuperarlo • regola CP, Commit-Precedenza: l’After State di un record di log deve essere scritto sul file log (in memoria stabile) prima del commit – se una transazione effettua il commit, ma le sue pagine modificate non sono state ancora riportate su disco dal buffer manager, e si verifica un malfunzionamento di sistema, la transazione deve essere rifatta – con la regola Commit- Precedenza si è sicuri di ritrovare i dati modificati (After State) nel log F.Cesarini - Basi Dati Distribuite Transazioni 54 27 GESTIONE SCRITTURA LOG E DATABASE • schema no-redo – la scrittura del record log precede la scrittura sulla base di dati – tutte le pagine modificate vengono copiate su disco prima della scrittura del record commit sul log • schema no-undo – la scrittura del record log precede la scrittura sulla base di dati – tutte le pagine modificate vengono copiate su disco dopo la scrittura del record commit sul log • schema undo/redo (DB2, ORACLE) – le scritture sul database su disco possono avvenire in un momento qualunque rispetto alla scrittura del commit sul log • i tre schemi rispettano le regole WAL e CP, scrivono il commit su disco in modo sincrono, si differenziano per il momento in cui scrivono sul database su disco F.Cesarini - Basi Dati Distribuite Transazioni 55 GESTIONE GUASTI MODELLO FAIL-STOP (guasto: evento istantaneo) • guasto di sistema – arresto di tutte le transazioni – ripresa a caldo (warm restart) del sistema • guasto di dispositivo – arresto di tutte le transazioni – ripresa a freddo (cold restart) del sistema F.Cesarini - Basi Dati Distribuite Transazioni 56 28 WARM RESTART CKP guasto t T2 T1 T3 T4 T5 UNDO: REDO: T3 T2 T5 completamente T4 Si ricordi che il checkpoint copia su disco le scritture effettuate dalle transazioni andate in commit F.Cesarini - Basi Dati Distribuite Transazioni 57 WARM RESTART 1. si accede al log e lo si percorre all’indietro fino all’ultimo ckp 2. si costruiscono gli insiemi UNDO_set e REDO_set 3. si disfano le transazioni di UNDO_set ripercorrendo all’indietro il log fino al loro inizio (anche prima di ckp) 4. si rifanno le transazioni in REDO_set rifacendo le loro azioni nell’ordine in cui compaiono nel log 2.1 2.2 2.3 UNDO_set:= transazioni elencate nel ckp record REDO_set:= ∅ si scandisce il log: se Begin(T) allora UNDO_set:= UNDO_set ∪ T se Commit(T) allora UNDO_set:= UNDO_set - T REDO_set:= REDO_set ∪ T F.Cesarini - Basi Dati Distribuite Transazioni 58 29 COLD RESTART • si ricopia il database (la parte deteriorata) dal dump più recente • si accede all’ultimo record dump sul log • si scandisce il log rifacendo tutte le azioni effettuate sul database dalle transazioni andate in commit • si effettua una ripartenza a caldo F.Cesarini - Basi Dati Distribuite Transazioni 59 30