basi di dati e sistemi informativi struttura di un dbms: gestione delle transazioni home page del...

75
Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/

Upload: saturnino-sanna

Post on 02-May-2015

221 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Basi di Dati e Sistemi

Informativi

Struttura di un DBMS:Gestione delle Transazioni

Home page del corso:

http://www.cs.unibo.it/~difelice/dbsi/

Page 2: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

Transazione sequenza di operazioni SQL la cui esecuzione deve avvenire garantendo alcune caratteristiche di correttezza, isolamento e robustezza. Una transazione termina con commit (

“procedi”) o con abort ( “annulla”). Definite dall’utente, tramite comandi

SQL: start transaction … end transaction. Definite automaticamente dal sistema.

Page 3: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Atomicita’ La transazione deve essere eseguita con la regola del “tutto o niente”.

Consistenza La transazione deve lasciare il DB in uno stato consistente, eventuali vincoli di integrita’ non devono essere violati.

Isolamento L’esecuzione di una transazione deve essere indipendente dalle altre.

Persistenza L’effetto di una transazione che ha fatto commit non deve essere perso.

PROPRIETA’ ACIDE DELLE TRANSAZIONI

Gestione delle Transazioni

Page 4: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestore della consistenza tipicamente implementata dai compilatori del DDL.

Prima di eseguire un’istruzione SQL, il suo effetto viene simulato.

Si verifica che tutti i vincoli di integrita’ siano rispettati, in caso contrario si genera un errore e si blocca l’esecuzione dell’istruzione corrente.

Gestione delle Transazioni

Page 5: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Memoria secondaria

Gestore della memoria secondaria

Gestore del buffer

Gestore deimetodi d’accesso

Gestore di Interrogazioni e aggiornamenti

Gestore delle transazioni

Gestore della concorrenza

Gestore dellaaffidabilità

Gestore delle affidabilita’ garantisce atomicita’ e persistenza delle transazioni.

Gestore della concorrenza garantisce l’isolamento delle transazioni.

Gestione delle Transazioni

Page 6: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Memoria secondaria

Gestore della memoria secondaria

Gestore del buffer

Gestore deimetodi d’accesso

Gestore di Interrogazioni e aggiornamenti

Gestore delle transazioni

Gestore della concorrenza

Gestore dellaaffidabilità

Gestore delle affidabilita’ garantisce atomicita’ e persistenza delle transazioni.

Gestore della concorrenza garantiscel’isolamento delle transazioni.

Gestione delle Transazioni

Page 7: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestore del’affidabilita’ verifica che siano garantite le proprieta’ di atomicita’ e persistenza delle transazioni.

Responsabile di implementare i comandi di: start transaction, commit, rollback

Responsabile di ripristinare il sistema dopo malfunzionamenti software (ripresa a caldo)

Responsabile di ripristinare il sistema dopo malfunzionamenti hardware (ripresa a freddo)

Gestione delle Transazioni

Page 8: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il controllore di affidabilita’ utilizza un log, nel quale sono indicate tutte le operazioni svolte dal DBMS.

LOG, struttura fisica

<10:34, 11/12/2012, Transaction: T1, INSERT(3,Mario, Rossi) INTO IMPIEGATI> <10:35, 11/12/2012, Transaction: T2, DELETE(3,Mario, Rossi) INTO IMPIEGATI> <10:36, 11/12/2012, Transaction: T3, INSERT(6,Maria, Bianchi) INTO IMPIEGATI>

Gestione delle Transazioni

Page 9: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il controllore di affidabilita’ utilizza un log, nel quale sono indicate tutte le operazioni svolte dal DBMS.LOG, struttura logica

Time

10:34 10:35 10:36

T1, INSERT T2, DELETE T3, INSERT

Tramite il log, e’ possibile fare do/undo delle transazioni …

Gestione delle Transazioni

Page 10: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Tramite il log, e’ possibile ripristinare lo stato completo del DBMS in caso di malfunzionamenti/guasti … a patto che non siano persi anche i dati del log!

Si assume che i dati del log siano memorizzati su memoria stabile (astrazione!).

Si possono usare opportune tecnologie per aumentare l’affidabilita’ RAID (Redundant Array of Independent Disks)

Gestione delle Transazioni

Page 11: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

Due tipi di record:

Record di transizione tengono traccia delle

operazioni svolte da ciascuna transizione sul DBMS.

Record di sistema tengono traccia delle operazioni di sistema (dump/checkpoint).

Gestione delle Transazioni

Page 12: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

Due tipi di record:

Record di transizione tengono traccia delle

operazioni svolte da ciascuna transizione sul DBMS.

Record di sistema tengono traccia delle operazioni di sistema (dump/checkpoint).

Gestione delle Transazioni

Page 13: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

1. Record di begin, commit, abort: tengono traccia del tipo di operazione e del nome (univoco) della transazione.

B(T),C(T),B(T2),C(T2),B(T3),A(T3), etc

Gestione delle Transazioni

Page 14: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

2. Record di update: tengono traccia del del nome (univoco) della transazione, dell’oggetto modificato (O), dello stato precedente (BS) e dello stato attuale (AS).

U(T,O,BS,AS) -> U(T1,”CONTO”,4,5)

Gestione delle Transazioni

Page 15: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

3. Record di insert: tengono traccia del del nome (univoco) della transazione, dell’oggetto modificato (O), dello stato attuale (AS).

I(T,O,AS) -> I(T1,”CONTO”,1000)

Gestione delle Transazioni

Page 16: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

4. Record di delete: tengono traccia del del nome (univoco) della transazione, dell’oggetto modificato (O), dello stato precedente (BS).

D(T,O,BS) -> D(T1,”CONTO”,1000)

Gestione delle Transazioni

Page 17: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

Ricapitolando, i record delle transazioni sono del tipo:

B(T), C(T), A(T) U(T, O, BS, AS), I(T, O, AS) D(T,O,BS)

Gestione delle Transazioni

Page 18: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

Due tipi di record:

Record di transizione tengono traccia delle

operazioni svolte da ciascuna transizione sul DBMS.

Record di sistema tengono traccia delle operazioni di sistema (dump/checkpoint).

Gestione delle Transazioni

Page 19: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

1. Record di dump: tengono traccia degli eventi di backup completo della base di dati su memoria stabile. Tali eventi sono effettuati con una certa periodicita’ definita dall’amministratore del sistema.

DUMP(DB)

Gestione delle Transazioni

Page 20: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Il log si presenta come un file sequenziale suddiviso in record:

Time

2. Record di checkpoint: tengono traccia delle transazioni attive presenti nel sistema. Transazione attiva transazione che non si e’ ancora conclusa con un’azione di commit o rollback.

CK(T1,T2,T3 …, Tn)

Gestione delle Transazioni

Page 21: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

RS

Per aumentare l’efficienza prestazionale, tutti i DBMS utilizzano un buffer temporaneo di informazioni in memoria principale, il quale viene periodicamente scritto su memoria secondaria.

HD Buffer del DBMS

DBMS

Gestore del buffer(modulo del DBMS)

RAM

Gestione delle Transazioni

Page 22: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Quando si effettua un checkpoint:

1. Si sospendono tutte le operazioni in corso sul DBMS.

2. Si rendono effettive anche su memoria secondaria tutte le operazioni effettuate da transazioni che hanno fatto commit, i cui dati si trovino ancora nel buffer (flush).

3. Si scrivono nel record di checkpoint del log tutte le transazioni attive del sistema.

4. Si riprende l’esecuzione delle operazioni.

Gestione delle Transazioni

Page 23: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Regola Write Ahead Log la parte BS (before state) di ogni record di log deve essere scritta prima che la corrispondente operazione venga effettuata nella base di bati.

In pratica: I record di log devono essere scritti prima delle corrispondenti operazioni sulla base di dati, in modo da poter fare undo delle operazioni!

REGOLE di SCRITTURA del LOG

Gestione delle Transazioni

Page 24: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Regola di Commit Precedence la parte AS (after state) di ogni record di log deve essere scritta nel log prima di effettuare il commit della transazione.

In pratica: I record di log devono essere scritti prima di effettuare l’operazione di commit, in modo da poter garantire il redo di una transazione non ancora scritta su memoria secondaria.

REGOLE di SCRITTURA del LOG

Gestione delle Transazioni

Page 25: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

ESEMPI di SCHEDULING di OPERAZIONI

Time

B(T) C(T)I(T,X,AS) I(T,Y,AS)

w(X) w(Y)

SCRITTURESUL DB

SCRITTURESUL LOG

Regola Write Ahead Log OK Regola Commit Precedence OK

Gestione delle Transazioni

Page 26: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

ESEMPI di SCHEDULING di OPERAZIONI

Time

B(T) C(T)I(T,X,AS) I(T,Y,AS)

w(X) w(Y)

SCRITTURESUL DB

SCRITTURESUL LOG

Regola Write Ahead Log NO! Regola Commit Precedence OK

Gestione delle Transazioni

Page 27: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

ESEMPI di SCHEDULING di OPERAZIONI

Time

B(T) C(T)I(T,X,AS) I(T,Y,AS)

w(X) w(Y)

SCRITTURESUL DB

SCRITTURESUL LOG

Regola Write Ahead Log OK Regola Commit Precedence OK

Gestione delle Transazioni

Page 28: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

ESEMPI di SCHEDULING di OPERAZIONI

Time

B(T) C(T)I(T,X,AS) I(T,Y,AS)

w(X) w(Y)

SCRITTURESUL DB

SCRITTURESUL LOG

Nella pratica: le scritture sulla base di dati possono avvenire in qualsiasi momento a patto di garantire le due regole sui log ..

Gestione delle Transazioni

Page 29: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

I guasti possono essere dovuti a:

Malfunzionamenti software perdita del contenuto della memoria principale, nessun danno per la memoria secondaria.

Malfunzionamenti hardware (1) perdita di dati nella memoria secondaria, ma non nella memoria stabile.

Malfunzionamenti hardware (2) perdita di dati nella memoria secondaria e stabile.

Gestione delle Transazioni

Page 30: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Modello di funzionamento (fail-stop)

Fail

FailStop

Boot

Restart

Normal

Restartcompletato

Il DBMS usa tre stati: Normal

esecuzione normale

Stop occorrenza di un guasto

Restart ripristino dai guasti

Gestione delle Transazioni

Page 31: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Modello di funzionamento (fail-stop)

Fail

FailStop

Boot

Restart

Normal

Restartcompletato

Due tipi di operazioni di ripristino: Ripresa a caldo

Malfunziomenti software.

Ripresa a freddo Malfunzionamenti hardware (1).

Gestione delle Transazioni

Page 32: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

La ripresa a caldo si articola in 4 fasi:

1. Si accede al log, lo si scorre fino all’ultimo record di checkpoint.

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(T3,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)

Gestione delle Transazioni

Page 33: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

2. Si decidono le transazioni da annullare (undo) o da rifare (redo).

a. Si costruiscono due insiemi: UNDO e REDO.

b. UNDO e’ inizializzato con la lista delle transazioni attive, REDO e’ vuoto.

c. Si aggiungono ad UNDO tutte le transazioni T di cui esiste un record B(T).

d. Si spostano da UNDO a REDO tutte le transazioni di cui esiste un record C(T).

Gestione delle Transazioni

Page 34: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

3. Per il set di UNDO si ripercorre il file di log, disfacendo tutte le azioni effettuate da ogni transazione T contenuta nel set, dalla piu’ recente alla meno recente.

4. Per il set di REDO si applicano le azioni affettuate da ogni transazione T contenuta nel set, dalla meno recente alla piu’ recente.

Gestione delle Transazioni

Page 35: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

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)

1. Transazioni attive all’ultimo CK: {T2, T3, T4}.

2. Costruzione degli insiemi UNDO/REDO

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}

Gestione delle Transazioni

Page 36: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

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)

3. UNDO delle transazioni {T2,T3}:

I(T2,O6,A8) DELETE O6D(T3,O5,B7) INSERT (O5=B7)U(T3,O3,B5,A5) O3=B5U(T3,O2,B3,A3) O2=B3U(T2,O1,B1,A1) O1=B1

Gestione delle Transazioni

Page 37: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

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)

4. REDO delle transazioni {T4,T5}:

U(T4,O3,B4,A4) O3=A4U(T5,O4,B6,A6) O4=B6

Gestione delle Transazioni

Page 38: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

La ripresa a freddo si articola in 4 fasi:1. Si copia il dump nel DB attuale (cercando di sovrascrivere solo la parte deteriorata).

2. Relativamente alla parte deteriorata, si scorre il log dal dump in poi fino all’ultimo checkpoint, e si effettuano tutte le azioni della transazioni concluse con un commit.

3. Si effettua la ripresa a caldo (con l’algoritmo visto prima).

Gestione delle Transazioni

Page 39: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Memoria secondaria

Gestore della memoria secondaria

Gestore del buffer

Gestore deimetodi d’accesso

Gestore di Interrogazioni e aggiornamenti

Gestore delle transazioni

Gestore della concorrenza

Gestore dellaaffidabilità

Gestore delle affidabilita’ garantisce atomicita’ e persistenza delle transazioni.

Gestore della concorrenza garantisce l’isolamento delle transazioni.

Gestione delle Transazioni

Page 40: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

T1= Read(x); x=x+1; Write(x); Commit WorkT2= Read(x); x=x+1; Write(x); Commit Work

In un DMBS, le transazioni vengono eseguite in concorrenza per ragioni di efficienza / scalabilita’ …Tuttavia, l’esecuzione concorrente determina un insieme di problematiche che devono essere gestite …

Se x=3, al termine delle transazioni x vale 5 (esecuzione sequenziale) … ma in esecuzione concorrente?

Gestione delle Transazioni

Page 41: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Problema1: Perdita di Aggiornamento

Transazione1 (T1) Transazione2 (T2)

Read(x)

x=x+1

Read(x)

x=x+1

Write(x)

Commit work

Write(x)Commit work

T1 scrive 4

T2 scrive 4

Gestione delle Transazioni

Page 42: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Problema2: Lettura sporca

Transazione1 (T1) Transazione2 (T2)

Read(x)

x=x+1

Write(x)

Read(x)

Commit work

Rollback work

T2 legge 4!

Gestione delle Transazioni

Page 43: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Problema3: Letture inconsistenti

Transazione1 (T1) Transazione2 (T2)

Read(x)

Read(x)

x=x+1

Write(x)

Commit work

Read(x)Commit work

T1 legge 3!

T1 legge 4!

Gestione delle Transazioni

Page 44: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Problema4: Aggiornamento Fantasma

Transazione1 (T1) Transazione2 (T2)

Read(x)

Read(y)

Read(y)

y=y-100

Read(z)

z=z+100

Write(y), Write(z)

Commit work

Read(z)s=x+y+z; commit work

Vincolo:x+y+zdeveessere =a 1000

Vincoloviolato!!

Gestione delle Transazioni

Page 45: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Date un insieme di transazioni T1,T2, Tn, di cui ciascuna formata da un certo insieme di operazioni di scrittura (wi) e lettura (ri):

Es. T1=r1(x) r1(y) r1(z) w1(y) …

Si definisce schedule la sequenza di operazioni di lettura/scrittura di tutte le transazioni cosi’ come eseguite sulla base di dati:

r1(x) r2(y) r1(y) w4(y) w2(z) …

Gestione delle Transazioni

Page 46: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Uno schedule S si dice seriale se le azioni di ciascuna transazione appaiono in sequenza, senza essere inframezzate da azioni di altre transazioni.

S={T1, T2, … Tn}

Schedule seriale ottenibile se:

(i) Le transazioni sono eseguite uno alla volta (scenario non realistico)

(ii) Le transazioni sono completamente indipendenti l’una dall’altra (improbabile)

Gestione delle Transazioni

Page 47: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Uno schedule S si dice serializzabile se produce lo stesso risultato di un qualunque scheduler seriale S’ delle stesse transazioni.

Gestione delle Transazioni

ScheduleSeriali

Schedule

ScheduleSerializzabili

CLASSI

Page 48: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Come implementare il controllo della concorrenza?

I DMBS commerciali usano il meccanismo dei lock per poter effettuare una qualsiasi operazioni di lettura/scrittura su una risorsa (tabella o valore di una cella), e’ necessario aver precedentemente acquisito il controllo (lock) sulla risorsa stessa.

Lock in lettura (accesso condiviso) Lock in scrittura (mutua esclusione)

Gestione delle Transazioni

Page 49: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Su ogni lock possono essere definite due operazioni:

Richiesta del lock in lettura/scrittura. Rilascio del lock (unlock) acquisito in

precedenza.

Gestione delle Transazioni

Libero r_locked w_locked

r_lock OK/r_locked OK/r_locked NO/w_locked

w_lock OK/w_locked NO/r_locked NO/w_locked

unlock errore OK/dipende OK/libero

STATO DELLA RISORSA

AZ

ION

E

Page 50: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Lock Manager componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni.

Per ciascun oggetto x del DBMS:

State(x) stato dell’oggetto (libero/r_locked/w_locked)Active(x) lista transazioni attive sull’oggettoQueued(x) lista transazioni bloccate sull’oggetto

Gestione delle Transazioni

STRUTTURE DATI del LOCK MANAGER

Page 51: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Lock Manager componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni.

1. Riceve una richiesta (r_lock, w_lock, unlock) da una transazione T, su un oggetto x (oggetto=tabella, colonna, etc).

2. Controlla la tabella stato/azione (slide precedente).3. Se la risposta e’ OK, aggiorna lo stato della

risorsa, e concede il controllo della risorsa alla transazione T.

4. Se la risposta e’ NO, inserisce la transazione T in una coda associata all’oggetto x.

Gestione delle Transazioni

AZIONI DEL LOCK MANAGER

Page 52: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

RISORSA x

LOCKMANAGER

T1: r_lock(x)

STATO(x): free

Answer to T1: OK

ACTIVE(x): {}

QUEUED(x): {}

STATO(x): r_locked

ACTIVE(x): {T1}

Page 53: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

RISORSA x

LOCKMANAGER

T2: r_lock(x)

STATO(x): free

Answer to T2: OK

ACTIVE(x): {}

QUEUED(x): {}

STATO(x): r_locked

ACTIVE(x): {T1}ACTIVE(x): {T1,T2}

Page 54: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

RISORSA x

LOCKMANAGER

T3: w_lock(x)

STATO(x): free

Answer to T3: NO

ACTIVE(x): {}

QUEUED(x): {}

STATO(x): r_locked

ACTIVE(x): {T1}ACTIVE(x): {T1,T2}QUEUED(x): {T3}

Page 55: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Two Phase Lock (2PL) Una transazione, dopo aver rilasciato un lock, non puo’ acquisirne un altro.

Gestione delle Transazioni

In pratica, una transazione acquisisce prima tutti i lock delle risorse cui necessita …

Time

Ris

ors

e

Fase di Acquisizione

Fase di Rilascio

Page 56: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

T1= r(x), w(y), CommitT2= r(y), Commit

T1 T2

r_lock(x)

r(x)

unlock(x)

r_lock(y)

r(y)

unlock(y)

Commit

w_lock(y)

w(y)

unlock(y)

Commit

TRANSAZIONI

SCHEDULE

Q. E’ uno schedule 2PL?

A. NO!

Page 57: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

T1= r(x), w(y), CommitT2= r(y), Commit

T1 T2

r_lock(x)

r(x)

w_lock(y)

r_lock(y)

w(y)

unlock(y)

unlock(x)

r(y)

unlock(y)

Commit

Commit

TRANSAZIONI

SCHEDULE

Q. E’ uno schedule 2PL?

A. SI!

Page 58: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Two Phase Lock (2PL) Una transazione, dopo aver rilasciato un lock, non puo’ acquisirne un altro.

Gestione delle Transazioni

Ogni schedule che rispetta il 2PL e’ anche serializzabile (perche’ ?).

Ogni schedule che rispetta il 2PL non puo’ incorrere in configurazioni erronee dovute a: aggiornamento fantasma, lettura inconsistente, perdita di aggiornamento … che accade in caso di lettura sporca?

Page 59: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

T1= r(x), w(y), CommitT2= r(y), Commit

T1 T2

r_lock(x)

r(x)

w_lock(y)

r_lock(y)

w(y)

unlock(y)

unlock(x)

r(y)

unlock(y)

Abort

Commit

TRANSAZIONI

SCHEDULE

Lettura sporca!

Page 60: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Strict Two Phase Lock (2PL) I lock di una transazione sono rilasciati solo dopo aver effettuato le operazioni di commit/abort.

Gestione delle Transazioni

Variante strict del 2PL, utilizzato in alcuni DBMS commerciali.

Uno schedule che rispetta lo S2PL eredita tutte le proprieta’ del 2PL, ed inoltre NON presenta anomalie causate da problemi di lettura sporca.

Page 61: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Gestione delle Transazioni

T1= r(x), w(y), CommitT2= r(y), Commit

T1 T2

r_lock(x)

r(x)

w_lock(y)

r_lock(y)

w(y)

Abort

unlock(x)

unlock(y)

r(y)

Commit

unlock(y)

TRANSAZIONI

SCHEDULE

Q. E’ uno schedule S2PL?

A. SI!

Page 62: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

PROBLEMA: I protocolli 2PL e S2PL possono generare schedule con situazioni di deadlock.

Gestione delle Transazioni

T1= r(x), w(y), CommitT2= r(y), w(x), Commit

TRANSAZIONI

SCHEDULE

T1 T2

r_lock(x)

r_lock(y)

r(x)

r(y)

w_lock(y)

w_lock(x)

Page 63: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche:

1. Uso dei timeout ogni operazione di una transazione ha un timeout entro il quale deve essere completata, pena annullamento (abort) della transazione stessa.

T1: r_lock(x,4000), r(x), w_lock(y,2000), w(y), commit, unlock(x), unlock(y)

Gestione delle Transazioni

Page 64: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche:

2. Deadlock avoidance prevenire le configurazioni che potrebbero portare ad un dealock … COME?

Lock/Unlock di tutte le risorse allo stesso tempo.

Utilizzo di time-stamp o di classi di priorita’ tra transazioni (problema: puo’ determinare starvation!)

Gestione delle Transazioni

Page 65: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche:

3. Deadlock detection utilizzare algoritmi per identificare eventuali situazioni di deadlock, e prevedere meccanismi di recovery dal deadlock Grafo delle richieste/risorse utilizzato per

identificare la presenza di cicli (corrispondenti a deadlock)

In caso di ciclo, si fa abort delle transazioni coinvolte nel ciclo in modo da eliminare la mutua dipendenza …

Gestione delle Transazioni

Page 66: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Un metodo alternativo al 2PL per la gestione della concorrenza in un DBMS prevede l’utilizzo dei time-stamp delle transazioni (metodo TS). Ad ogni transazione si associa un

timestamp che rappresenta il momento di inizio della transazione.

Ogni transazione non puo’ leggere o scrivere un dato scritto da una transazione con timestamp maggiore.

Ogni transazione non puo’ scrivere su un dato gia’ letto da una transazione con timestamp maggiore.

Gestione delle Transazioni

Page 67: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Un metodo alternativo al 2PL per la gestione della concorrenza in un DBMS prevede l’utilizzo dei time-stamp delle transazioni (metodo TS). Ad ogni oggetto x si associano due

indicatori:

WTM(x) timestamp della transazione che ha fatto l’ultima scrittura su x.

RTM(x) timestamp dell’ultima transazione (ultima=con t piu’ alto) che ha letto x.

Gestione delle Transazioni

Page 68: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Lo scheduler di sistema verifica se un’eventuale azione (rt(x) o wt(x)) eseguita da una transazione T con timestamp t puo’ essere eseguita o meno:

rt(x) Se t<WTM(x) allora la transazione viene uccisa. Se t>=WTM(x), la richiesta viene eseguita, ed RTM(x) viene aggiornato al massimo tra il valore precedente di RTM(x) e t stesso.

Gestione delle Transazioni

Page 69: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Lo scheduler di sistema verifica se un’eventuale azione (rt(x) o wt(x)) eseguita da una transazione T con timestamp t puo’ essere eseguita o meno:

wt(x) Se t<WTM(x) oppure t<RTM(x) allora la transazione viene uccisa. Altrimenti, la richiesta viene accettata, e WTM(x) viene posto uguale a t.

Gestione delle Transazioni

Page 70: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

ESEMPIO: RTM(x)=6, WTM(x)=3

Gestione delle Transazioni

T5: r5(x) OK, RTM(x)=6

T9: w9(x) OK, WTM(x)=9

T6: w6(x) NO, T6 uccisa

T8: r8(x) NO, T8 uccisa

T10: r10(x) OK, RTM(x)=10

Page 71: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Versione multivalore dell’algoritmo TS-based per ogni oggetto x, si mantengono N copie (xt), a diversi timestamp t.

Ad ogni oggetto x corrispondono:

Un RTM(x) globale, per tutte le versioni.

Un array WTM(x)N, aggiornato ogni volta che una transazione scrive sull’oggetto x, all’istante N.

Gestione delle Transazioni

Page 72: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

Versione multivalore dell’algoritmo TS-based per ogni oggetto x, si mantengono N copie (xt), a diversi timestamp t.

rt(x) sempre consentita. Se t> WTMN(x), allora si legge xN. Altrimenti, si legge xi, con:

WTMi(x)<t<WTMi+1(x)

wt(x) se t<RTM(x), si rifiuta la richiesta. Altrimenti si aggiunge una nuova copia xt e si aggiorna: WTMN(x)=t.

Gestione delle Transazioni

Page 73: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

In SQL-3, ed in molti DBMS commerciali (DB2, MySQL, PostgreSQL, Oracle, etc) sono definiti quattro livelli di isolamento tra transazioni:

Gestione delle Transazioni

Livello Descrizione

read uncommitted

(read only) La transazione non emette lock in lettura, e non rispetta lock esclusivi da altre transazioni.

read committed Richiede lock condivisi per effettuare le letture.

repeteable read Applica il protocollo S2PL anche in scrittura.

serializable Applica il protocollo S2PL con lock di predicato. S2PL utilizzato per le operazioni di scrittura, da tutti i livelli.

Page 74: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

SINTASSI MySQL

Gestione delle Transazioni

Iniziare una transazione e completarla:START TRANSACTION … (Statements SQL)COMMIT/ROLLBACK

Configurare livello di isolamento di esecuzione:SET TRANSACTION ISOLATION LEVEL

REPEATABLE READ | READ COMMITTED |READ UNCOMMITTED | SERIALIZABLE

Page 75: Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: difelice/dbsi

SINTASSI MySQL

Gestione delle Transazioni

Le transazioni sono utilizzabili solo su tabelle di tipo InnoDB (ACID-compliant).

E’ possibile gestire manualmente le operazioni di lock su tabelle (non consigliabile su tabelle di tipoInnoDB):

LOCK TABLEStabella { READ | WRITE }