Basi di Dati e Sistemi Informativi

Slides:



Advertisements
Presentazioni simili
Tecnologia delle basi di dati: Strutture fisiche di accesso
Advertisements

Introduzione ai DBMS I Sistemi di Gestione di Basi di Dati sono strumenti software evoluti per la gestione di grandi masse di dati residenti su memoria.
Sicurezza e concorrenza nelle basi di dati
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
File System Cos’è un File System File e Directory
Java: programmazione concorrente con condivisione di memoria
Algoritmi e Programmazione
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
Basi di dati attive Dispongono di un sottosistema integrato per definire e gestire regole di produzione (regole attive) Regole di tipo: Evento-Condizione-Azione.
G. Mecca – – Università della Basilicata Basi di Dati Tecnologia di un DBMS: Concorrenza e Affidabilità Concetti Avanzati versione 2.0.
Basi di Dati prof. A. Longheu
Scheduling in Linux (Kernel 2.6)
Interfaccia del file system
La Modifica dei Dati in una Base Dati La modifica dei dati contenuti allinterno di una base dati è unoperazione delicata Infatti, ogni potenziale problema.
SCHEDA INFORMATIVA DI UNITÀ
File.
Tecnologia di un data base server: Controllo della Concorrenza
Tecnologia di un Database Server S. Costantini Dispensa per il Corso di Basi di dati e Sistemi Informativi.
Risorse e Stallo.
Introduzione alla programmazione lll
Tecnologie di un database server: la gestione della concorrenza
Basi di dati attive Paolo Atzeni.
Struttura dei sistemi operativi (panoramica)
Aspetti sistemistici dellSQL. SQL environment Un SQL environment è un framework dove esistono dati e possono aversi istruzioni SQL eseguite su questi.
Cenni sulla gestione delle transazioni in DBMS
Le transazioni Itis Max Planck.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Transazioni.
Reti di Calcolatori L-S Un Sistema Decentrato di Allocazione del Carico per Applicazioni di Calcolo Distribuito Mauro Bampo.
Distributed File System Service Dario Agostinone.
Concorrenza e Sincronizzazione di Thread e Processi
Cos’è una transazione? Una transazione è un’unità logica di elaborazione richiesta da un’applicazione che dà luogo a una serie di operazioni fisiche elementari.
Docente: Roberto Basili Fond Inf (a.a ) Introduzione alla Progettazione Concettuale R. Basili.
Dottorato di ricerca Nuove Tecnologie e Informazione Territorio – Ambiente Nozioni fondamentali di Basi di Dati Seminario interno.
Basi di Dati e Sistemi Informativi
Corso di Basi di Dati Progettazione di Basi di Dati
Corso di Basi di Dati Il Linguaggio SQL
Sistemi Informativi sul Web
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
Laboratorio informatico I
Architettura Centralizzata di un DBMS Relazionale
1 Il Buffer Cache Unix (Bach: the Design of the Unix Operating System (cap: 3)
I processi.
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
Progetto Message Queues Service Olivelli Enrico Corso di Reti di Calcolatori LS A.A
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non volatile Gerarchia di memorie –Disco: capiente, lento, non volatile.
BDE-TRANS 1 Gestione di transazioni concorrenti. BDE-TRANS 2 Lock Principio: –Tutte le letture sono precedute da r_lock (lock condiviso) e seguite da.
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: –COMMIT –SAVEPOINT nome_punto.
Gestione del processore (Scheduler)
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Tipo Documento: unità didattica 4 Modulo 14 Compilatore: Antonella Bolzoni Supervisore: Data emissione: Release: Indice: A.Scheda informativa B.Introduzione.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Studio di una soluzione distribuita per la gestione di un centro sondaggi.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Alcuni esempi di dispositivi Disco rigido, RAID, video.
Sistema distribuito per il controllo remoto di Software SCADA HMI Presentazione di Paolo di Francia Reti di Calcolatori LS a.a
Transazioni in MySQL 4 Transazioni in MySQL 4
Progettazione di basi di dati: metodologie e modelli
1 Risorse e Stallo 2 Risorse (1) Esempi di risorse –stampanti –nastri –tabelle I processi devono accedere alle risorse in un ordine ragionevole Supponiamo.
Basi di dati Funzionalità e Progettazione Giorgio Ghelli.
BDE-TRANS 1 Gestione di transazioni concorrenti. BDE-TRANS 2 Controllo di concorrenza La concorrenza è fondamentale: decine o centinaia di transazioni.
Le basi di dati.
Controllo della concorrenza basato sui timestamp.
Anno Architetture dati DBMS Centralizzati Controllo di concorrenza Carlo Batini.
Introduzione alle basi di dati e ai sistemi di gestione di basi di dati.
Anno Architetture dati - DBMS Centralizzati Recovery management Carlo Batini.
Transcript della presentazione:

Basi di Dati e Sistemi Informativi Struttura di un DBMS: Gestione delle Transazioni Home page del corso: http://www.cs.unibo.it/~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.

Gestione delle Transazioni PROPRIETA’ ACIDE DELLE TRANSAZIONI 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.

Gestione delle Transazioni 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 Memoria secondaria Gestore della memoria secondaria Gestore del buffer Gestore dei metodi d’accesso Gestore di Interrogazioni e aggiornamenti Gestore delle transazioni Gestore della concorrenza affidabilità Gestore delle affidabilita’  garantisce atomicita’ e persistenza delle transazioni. Gestore della concorrenza  garantisce l’isolamento delle transazioni.

Gestione delle Transazioni Memoria secondaria Gestore della memoria secondaria Gestore del buffer Gestore dei metodi d’accesso Gestore di Interrogazioni e aggiornamenti Gestore delle transazioni Gestore della concorrenza affidabilità Gestore delle affidabilita’  garantisce atomicita’ e persistenza delle transazioni. Gestore della concorrenza  garantiscel’isolamento delle transazioni.

Gestione delle Transazioni 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 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 Il controllore di affidabilita’ utilizza un log, nel quale sono indicate tutte le operazioni svolte dal DBMS. LOG, struttura logica 10:34 10:35 10:36 Time T1, INSERT T2, DELETE T3, INSERT Tramite il log, e’ possibile fare do/undo delle transazioni …

Gestione delle Transazioni 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 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 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 Il log si presenta come un file sequenziale suddiviso in record: Time 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 Il log si presenta come un file sequenziale suddiviso in record: Time 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 Il log si presenta come un file sequenziale suddiviso in record: Time 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 Il log si presenta come un file sequenziale suddiviso in record: Time 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 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 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 Il log si presenta come un file sequenziale suddiviso in record: Time 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 Il log si presenta come un file sequenziale suddiviso in record: Time 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 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. RS Gestore del buffer (modulo del DBMS) RAM HD Buffer del DBMS DBMS

Gestione delle Transazioni Quando si effettua un checkpoint: Si sospendono tutte le operazioni in corso sul DBMS. 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). Si scrivono nel record di checkpoint del log tutte le transazioni attive del sistema. Si riprende l’esecuzione delle operazioni.

Gestione delle Transazioni REGOLE di SCRITTURA del LOG 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!

Gestione delle Transazioni REGOLE di SCRITTURA del LOG 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.

Gestione delle Transazioni ESEMPI di SCHEDULING di OPERAZIONI B(T) I(T,X,AS) I(T,Y,AS) C(T) SCRITTURE SUL LOG SCRITTURE SUL DB Time w(X) w(Y) Regola Write Ahead Log  OK Regola Commit Precedence  OK

Gestione delle Transazioni ESEMPI di SCHEDULING di OPERAZIONI B(T) I(T,X,AS) I(T,Y,AS) C(T) SCRITTURE SUL LOG SCRITTURE SUL DB Time w(X) w(Y) Regola Write Ahead Log  NO! Regola Commit Precedence  OK

Gestione delle Transazioni ESEMPI di SCHEDULING di OPERAZIONI B(T) I(T,X,AS) I(T,Y,AS) C(T) SCRITTURE SUL LOG SCRITTURE SUL DB Time w(X) w(Y) Regola Write Ahead Log  OK Regola Commit Precedence  OK

Gestione delle Transazioni ESEMPI di SCHEDULING di OPERAZIONI B(T) I(T,X,AS) I(T,Y,AS) C(T) SCRITTURE SUL LOG SCRITTURE SUL DB Time w(X) w(Y) 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 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 Modello di funzionamento (fail-stop) Il DBMS usa tre stati: Normal  esecuzione normale Stop  occorrenza di un guasto Restart  ripristino dai guasti Fail Stop Boot Restart Normal completato

Gestione delle Transazioni Modello di funzionamento (fail-stop) Due tipi di operazioni di ripristino: Ripresa a caldo  Malfunziomenti software. Ripresa a freddo  Malfunzionamenti hardware (1). Fail Stop Boot Restart Normal completato

Gestione delle Transazioni La ripresa a caldo si articola in 4 fasi: 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 Si decidono le transazioni da annullare (undo) o da rifare (redo). Si costruiscono due insiemi: UNDO e REDO. UNDO e’ inizializzato con la lista delle transazioni attive, REDO e’ vuoto. Si aggiungono ad UNDO tutte le transazioni T di cui esiste un record B(T). Si spostano da UNDO a REDO tutte le transazioni di cui esiste un record C(T).

Gestione delle Transazioni 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. 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 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) Transazioni attive all’ultimo CK: {T2, T3, T4}. 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 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 delle transazioni {T2,T3}: I(T2,O6,A8)  DELETE O6 D(T3,O5,B7)  INSERT (O5=B7) U(T3,O3,B5,A5)  O3=B5 U(T3,O2,B3,A3)  O2=B3 U(T2,O1,B1,A1)  O1=B1

Gestione delle Transazioni 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) REDO delle transazioni {T4,T5}: U(T4,O3,B4,A4)  O3=A4 U(T5,O4,B6,A6)  O4=B6

Gestione delle Transazioni La ripresa a freddo si articola in 4 fasi: Si copia il dump nel DB attuale (cercando di sovrascrivere solo la parte deteriorata). 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. Si effettua la ripresa a caldo (con l’algoritmo visto prima).

Gestione delle Transazioni Memoria secondaria Gestore della memoria secondaria Gestore del buffer Gestore dei metodi d’accesso Gestore di Interrogazioni e aggiornamenti Gestore delle transazioni Gestore della concorrenza affidabilità Gestore delle affidabilita’  garantisce atomicita’ e persistenza delle transazioni. Gestore della concorrenza  garantisce l’isolamento delle transazioni.

Gestione delle Transazioni 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 … T1= Read(x); x=x+1; Write(x); Commit Work T2= Read(x); x=x+1; Write(x); Commit Work Se x=3, al termine delle transazioni x vale 5 (esecuzione sequenziale) … ma in esecuzione concorrente?

Gestione delle Transazioni Problema1: Perdita di Aggiornamento Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work T2 scrive 4 T1 scrive 4

Gestione delle Transazioni Problema2: Lettura sporca Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work Rollback work T2 legge 4!

Gestione delle Transazioni Problema3: Letture inconsistenti Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work T1 legge 3! T1 legge 4!

Gestione delle Transazioni Problema4: Aggiornamento Fantasma Vincolo: x+y+z deve essere = a 1000 Transazione1 (T1) Transazione2 (T2) Read(x) Read(y) y=y-100 Read(z) z=z+100 Write(y), Write(z) Commit work s=x+y+z; commit work Vincolo violato!!

Gestione delle Transazioni 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 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: Le transazioni sono eseguite uno alla volta (scenario non realistico) Le transazioni sono completamente indipendenti l’una dall’altra (improbabile)

Gestione delle Transazioni Uno schedule S si dice serializzabile se produce lo stesso risultato di un qualunque scheduler seriale S’ delle stesse transazioni. CLASSI Schedule Schedule Serializzabili Schedule Seriali

Gestione delle Transazioni 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 Su ogni lock possono essere definite due operazioni: Richiesta del lock in lettura/scrittura. Rilascio del lock (unlock) acquisito in precedenza. STATO DELLA RISORSA Libero r_locked w_locked r_lock OK/r_locked NO/w_locked w_lock OK/w_locked NO/r_locked unlock errore OK/dipende OK/libero AZIONE

Gestione delle Transazioni 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’oggetto Queued(x)  lista transazioni bloccate sull’oggetto STRUTTURE DATI del LOCK MANAGER

Gestione delle Transazioni Lock Manager  componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni. Riceve una richiesta (r_lock, w_lock, unlock) da una transazione T, su un oggetto x (oggetto=tabella, colonna, etc). Controlla la tabella stato/azione (slide precedente). Se la risposta e’ OK, aggiorna lo stato della risorsa, e concede il controllo della risorsa alla transazione T. Se la risposta e’ NO, inserisce la transazione T in una coda associata all’oggetto x. AZIONI DEL LOCK MANAGER

Gestione delle Transazioni RISORSA x T1: r_lock(x) LOCK MANAGER STATO(x): r_locked STATO(x): free ACTIVE(x): {T1} ACTIVE(x): {} QUEUED(x): {} Answer to T1: OK

Gestione delle Transazioni RISORSA x T2: r_lock(x) LOCK MANAGER STATO(x): r_locked STATO(x): free ACTIVE(x): {T1} ACTIVE(x): {T1,T2} ACTIVE(x): {} QUEUED(x): {} Answer to T2: OK

Gestione delle Transazioni RISORSA x T3: w_lock(x) LOCK MANAGER STATO(x): r_locked STATO(x): free ACTIVE(x): {T1} ACTIVE(x): {T1,T2} ACTIVE(x): {} QUEUED(x): {T3} QUEUED(x): {} Answer to T3: NO

Gestione delle Transazioni Two Phase Lock (2PL)  Una transazione, dopo aver rilasciato un lock, non puo’ acquisirne un altro. In pratica, una transazione acquisisce prima tutti i lock delle risorse cui necessita … Fase di Acquisizione Risorse Fase di Rilascio Time

Gestione delle Transazioni r_lock(x) r(x) unlock(x) r_lock(y) r(y) unlock(y) Commit w_lock(y) w(y) TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Q. E’ uno schedule 2PL? A. NO!

Gestione delle Transazioni r_lock(x) r(x) w_lock(y) r_lock(y) w(y) unlock(y) unlock(x) r(y) Commit TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Q. E’ uno schedule 2PL? A. SI!

Gestione delle Transazioni Two Phase Lock (2PL)  Una transazione, dopo aver rilasciato un lock, non puo’ acquisirne un altro. 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?

Gestione delle Transazioni r_lock(x) r(x) w_lock(y) r_lock(y) w(y) unlock(y) unlock(x) r(y) Abort Commit TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Lettura sporca!

Gestione delle Transazioni Strict Two Phase Lock (2PL)  I lock di una transazione sono rilasciati solo dopo aver effettuato le operazioni di commit/abort. 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.

Gestione delle Transazioni r_lock(x) r(x) w_lock(y) r_lock(y) w(y) Abort unlock(x) unlock(y) r(y) Commit TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Q. E’ uno schedule S2PL? A. SI!

Gestione delle Transazioni PROBLEMA: I protocolli 2PL e S2PL possono generare schedule con situazioni di deadlock. TRANSAZIONI T1 T2 r_lock(x) r_lock(y) r(x) r(y) w_lock(y) w_lock(x) T1= r(x), w(y), Commit T2= r(y), w(x), Commit SCHEDULE

Gestione delle Transazioni Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche: 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 Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche: 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 Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche: 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 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 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 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 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 ESEMPIO: RTM(x)=6, WTM(x)=3 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

Gestione delle Transazioni 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 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 In SQL-3, ed in molti DBMS commerciali (DB2, MySQL, PostgreSQL, Oracle, etc) sono definiti quattro livelli di isolamento tra 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.

Gestione delle Transazioni SINTASSI MySQL 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

Gestione delle Transazioni SINTASSI MySQL 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 tipo InnoDB): LOCK TABLES tabella { READ | WRITE }