Transazioni. Antonella Poggi. Dipartimento di informatica e Sistemistica Università di Roma La Sapienza

Documenti analoghi
Transazioni. Transazioni. Stati di una transazione. Transazioni

Gestione della Concorrenza

Il linguaggio SQL: transazioni

Sistemi mono o multiutente. Un criterio per classificare un sistema di basi di dati è il numero degli utenti che possono fruirne simultaneamente.

Intoduzione alle transazioni e alle proprieta ACID delle transazioni

Trigger. Basi di dati attive. Trigger: regole che specificano azioni attivate automaticamente dal DBMS al verificarsi di determinati eventi

Tali regole vengono attivate in modo automatico al verificarsi di specifici eventi sulla. eseguono azioni sulla base di dati stessa.

Unità D3. Sicurezza nelle basi di dati. Sicurezza e concorrenza nelle basi di dati. Controllo accesso. Protezione e integrità dati

Linguaggio SQL: costrutti avanzati

Transazioni in SQL. Nicola Vitacolonna Corso di Basi di Dati Università degli Studi di Udine 4 dicembre 2013

Esecuzione concorrente di transazioni

Parte VII Gestione delle transazioni

Tratti dal cap. 9 di: Atzeni, Ceri, Paraboschi, Torlone Basi di Dati II edizione, 1999, McGraw-Hill

Basi di Dati e Sistemi Informativi. Le Transazioni. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Triggers. Antonella Poggi, Claudio Corona. Dipartimento di informatica e Sistemistica Università di Roma La Sapienza

Pag. 1. Gestione delle transazioni. Linguaggio SQL: costrutti avanzati. Esempio applicativo. Gestione delle transazioni. Prelievo. Esempio applicativo

DB - Cenni sulla gestione delle transazioni

APPENDICE. Procedure in SQL (1)

BENEDETTI ALESSANDRO Matricola : PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

Esecuzione concorrente di transazioni

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Parte 2 Esercitazione sulla gestione della concorrenza

6.6 Regioni Critiche Condizionali. 6.9 Transazioni Atomiche Modello del Sistema Transazionale

Transazioni. Architettura di un DBMS. Utente/Applicazione. transazioni. Transaction Manager. metadati, statistiche.

Gestione delle transazioni. Concetto di transazione

Cap. 1-I 1 I sistemi informatici

Progettazione di Sistemi Informatici

Transazioni. Capitolo 13. Scrittura immediata e scrittura differita. Concorrenza in un DBMS. Una transazione. Gestione delle transazioni

Gestione delle transazioni. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1

2011 Politecnico di Torino 1

Tecnologia di un Database Server (centralizzato) Introduzione generale

Transazioni. Transazioni. Transazioni. Definizione di una transazione. Transazione

Basi di dati attive. Una base di dati è ATTIVA quando consente la definizione e la gestione di regole di produzione (regole attive o trigger).

TRANSAZIONI DISTRIBUITE TRANSAZIONI

Esempio di sistema informativo

Basi di Dati: Corso di laboratorio

ARCHITETTURA DI UN B.D.M.S. Parte I Il controllo di concorrenza

Tecnologia di un Database Server (centralizzato) Gestione della concorrenza

Gestione delle transazioni

Le Basi di Dati Attive

Transazioni - Parte 1

Gestione delle transazioni

2011 Politecnico di Torino 1

Gestione delle transazioni

ARCHITETTURE DEI CALCOLATORI Multiprocessori: : L approccio Transactional Memory

Laboratorio di Basi di Dati SQL avanzato

Basi di Dati prof. A. Longheu. 5 Progettazione fisica

Vincoli di Integrità

La durability. I dati modificati da una transazione che ha fatto il commit non devono mai essere persi. La durability consente di reagire a:

Concorrenza, lucidi integrativi

Ogni ufficio è formato da 100 dipendenti, i quali hanno a loro volta 3 clienti ciascuno. Inoltre, ad ogni ufficio sono stati assegnati 4 fornitori.

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

Basi di Dati: Corso di laboratorio

La gestione della concorrenza in pratica

L'esecuzione concorrente è essenziale per garantire buone prestazioni nei database, poichè i dischi sono lenti ed è bene tenere la CPU impegnata.

Laboratorio di Basi di Dati

Silvia Chiusano, Paolo Garza 1

Indicare se i seguenti schedule possono produrre anomalie; i simboli ci e ai indicano l esito (commit o abort) della transazione.

Introduzione Concetti Generali Pratica su Access Link utili. ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 1

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

Un sistema transazionale POSTGRESQL. POSTGRESQL come sistema transazionale. Michele Finelli BioDec

JDBC. Marco Tessarotto Programmazione dei Web Server Anno Accademico

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

Architettura MySQL. E Motori MySQL

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

Tecnologie Web T Gestione delle Transazioni e Livelli di Isolamento

Recovery manager Gestore della affidabilità

8 Tecniche di recovery

Basi di Dati. Concetti e Principi Generali. Maria Mirto

Gestione delle transazioni

Le transazioni. Dott. Doria Mauro

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni relative all amministrazione di un condominio:

Gestione del Buffer. Gestione delle Transazioni. Il buffer. Il gestore del buffer 2. Il gestore del buffer 1

La gestione della concorrenza

Basi di Dati Distribuite

BASI DI DATI TECNOLOGIA DEI SERVER PER BASI DI DATI

Introduzione. i trigger rendono reattivo il comportamento del sistema alle sollecitazioni esterne.

Basi di dati II 30 gennaio 2015

Corso di Basi di Dati

RELAZIONE FINALE DEL DOCENTE

Elena Baralis 2007 Politecnico di Torino 1

Basi di dati II Prova parziale 29 maggio 2014 Compito A Tempo a disposizione: un ora e trenta minuti.

Dischi e CPU. Alcuni esercizi sulle prestazioni (seconda parte)

L architettura di un DBMS

BASI DI DATI E UTENTI DI BASI DI DATI

Laboratorio di Basi di Dati

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Elena Baralis 2007 Politecnico di Torino 1

Viene richiesto di MIN CARD(S,E) = 1 UPDATE DELETE MAX CARD(S,E) = 3 INSERT UPDATE

Le API per la persistenza. Dott. Doria Mauro

Cognome Nome Matricola Ordin.

SISTEMI INFORMATIVI AZIENDALI. introduzione ai sistemi informativi 1

Corso di Basi di Dati

Pag Politecnico di Torino 1

Indice Prefazione SQL Procedurale/SQL-PSM (Persistent Stored Modules)... 3 Vincoli e Trigger... 9

Organizzazione Fisica dei Dati (Parte II)

Tabelle esempio: Impiegato/Dipartimento

Parte 3 Gestione del buffer e gestione del recovery

Interrogazioni nidificate

Transcript:

Transazioni Antonella Poggi Dipartimento di informatica e Sistemistica Università di Roma La Sapienza Progetto di Applicazioni Software Anno accademico 2008-2009 Questi lucidi sono stati prodotti sulla base del materiale preparato per il corso di progetto di Basi di Dati da A. Calì e D. Lembo.

Transazioni Una transazione è una unità elementare di lavoro svolta da un programma applicativo su un DBMS. Una transazione può comprendere una o più operazioni sui dati. L esecuzione di una applicazione viene vista come una serie di transazioni, intervallate dall esecuzione di operazioni non relative ai dati. A.Poggi 1

Transazioni BOT (Begin Of Transaction): inizio della transazione EOT (End of Transaction): fine della transazione commit operazione che rende definitivi i cambiamenti rollback operazione che annulla i cambiamenti eseguiti a partire dall ultimo commit A.Poggi 2

Stati di una transazione PARTIALLY COMMITTED commit COMMITTED end begin ACTIVE abort abort FAILED ABORTED A.Poggi 3

Stati di una transazione ACTIVE, ABORTED, COMMITTED ovvî PARTIALLY COMMITTED subito dopo l esecuzione dell ultimo statement della transazione FAILED precede immediatamente ABORTED; la transazione va in FAILED quando non si può fare commit o quando un abort è esplicitamente invocato A.Poggi 4

SQL e la modalità auto-commit I DBMS mettono a disposizione una modalità di auto-commit, grazie alla quale ogni comando SQL sulla base dati è implicitamente seguito dal commit In tale modalità, di fatto, tutte le transazioni sono costituite da un solo comando SQL Per transazioni così semplici, utilizzare la modalità autocommit porta vantaggi in termini di praticità della scrittura del codice dell applicazione e di efficienza Ad ogni modo, nelle applicazioni è spesso necessario impostare transazioni che contengono più di un comando SQL. In tutti questi casi il commit deve essere esplicitamente gestito dal programmatore. A.Poggi 5

Proprietà acide delle transazioni 1. Atomicity (atomicità) 2. Consistency (consistenza) 3. Isolation (isolamento) 4. Durability (persistenza) A.Poggi 6

Atomicità L atomicità garantisce che le operazioni di una transazione vengano eseguite im modo atomico (tutte o nessuna). È cruciale per l integrità dei dati Se qualcosa va storto, il sistema deve essere in grado di annullare tutti i cambiamenti fatti a partire dall inizio della transazione A.Poggi 7

Consistenza La consistenza assicura che l esecuzione della transazione porti la base di dati in uno stato consistente, i.e. che non violi i vincoli di integrità sulla base di dati. In accordo con questa propriet a, la verifica della violazione dei vincoli dovrebbe essere fatta alla fine della transazione (in modo differito). A.Poggi 8

Isolamento L isolamento garantisce che l esecuzione di una transazione sia indipendente dalla esecuzione contemporanea di altre transazioni. Le transazioni concorrenti non si influenzano l una con l altra. A.Poggi 9

Persistenza La persistenza garantisce che se la transazione va a buon fine, ovvero dopo che un commit è stato eseguito con successo, l effetto della transazione sia registrato in maniera permanente sulla base di dati. A.Poggi 10

Schedule seriali Dato un insieme di transazioni T 1, T 2,, T n, una sequenza S di esecuzioni di azioni di tali transazioni che rispetta l ordine delle azioni all interno di una transazione (i.e. tale che se l azione a occorre prima dell azione b in T i, allora a occorre prima di b anche in S) è chiamato schedule (su T 1, T 2,, T n ) Uno schedule S è detto seriale se le azioni di ogni transazione in S avvengono prima di tutte le azioni di un altra transazione in S, i.e., se in S le azioni si diverse transazioni non si alternano. A.Poggi 11

Serializzabilità Uno schedule S è serializzabile se il risultato della sua esecuzione è lo stesso risultato prodotto dall esecuzione di uno schedule seriale costituito dalle stesse transazioni. Cioè, uno schedule S su T 1, T 2,, T n è serializable se esiste uno schedule seriale su T 1, T 2,, T n che è equivalente ad S. Due schedule S 1 e S 2 sono equivalenti se, per ogni stato iniziale, l esecuzione di S 1 produce lo stesso risultato dell esecuzione di S 2. Per esempio, date T 1 (x = x + x; x = x + 2) e T 2 (x = x 2; x = x + 2), due possibili schedule seriali su di esse sono: Sequenza 1: x = x + x; x = x + 2; x = x 2; x = x + 2 Sequenza 2: x = x 2; x = x + 2; x = x + x; x = x + 2 A.Poggi 12

Schedule seriale Esempio Tempo T1 T2 X Y t1 begintrans 100 100 t2 read(x,t) 100 100 t3 t := t+100 100 100 t4 write(x,t) 200 100 t5 read(y,v) 200 100 t6 v := v*3 200 100 t7 write(y,v) 200 300 t8 commit 200 300 t9 begintrans 200 300 t10 read(x,s) 200 300 t11 s := s-10 200 300 t12 write(x,s) 190 300 t13 commit 190 300 A.Poggi 13

Schedule serializzabile Esempio Tempo T1 T2 X Y t1 begintrans 100 100 t2 read(x,t) 100 100 t3 t := t+100 100 100 t4 write(x,t) 200 100 t5 begintrans 200 100 t6 read(x,s) 200 100 t7 s := s-10 200 100 t8 write(x,s) 190 100 t9 commit 190 100 t10 read(y,v) 190 100 t11 v := v*3 190 100 t12 write(y,v) 190 300 t13 commit 190 300 A.Poggi 14

Conflitti nelle transazioni concorrenti Due azioni sullo stesso oggetto sono in conflitto se almeno una di queste è una operazione di scrittura. Due transazioni concorrenti T1 e T2 sono in conflitto se presentano azioni in conflitto sullo stesso oggetto. Individuiamo tre tipi di conflitti (assumendo che sia T1 a subire il conflitto) scrittura-lettura o Write-Read (WR): T1 legge un oggetto precedentemente scritto da T2 (che non è ancora conclusa); A.Poggi 15

Anomalie nelle transazioni concorrenti (cont.) lettura-scrittura o Read-Write (RW): T2 scrive un oggetto precedentemente letto da T1 (che potrebbe leggere di nuovo questo oggetto); scrittura-scrittura o Write-Write (WW): T2 scrive un oggetto precedentemente scritto da T1 (per cui sovrascrive il cambiamento di T1). A.Poggi 16

Anomalie nelle transazioni concorrenti Le anomalie nelle transazioni concorrenti possono essere caratterizzate come segue: 1. dirty read (WR) 2. unrepeatable read (RW) 3. lost update (WW) 4. phantom read 5. inconsistent analysis A.Poggi 17

Dirty Read Esempio Tempo T1 T2 X t1 begintrans 100 t2 read(x,t) 100 t3 t := t+100 100 t4 begintrans write(x,t) 200 t5 read(x,s) 200 t6 s := s-10 rollback 100 t7 write(x,s) 190 t8 commit 190 A.Poggi 18

Dirty Read Si può verificare quando una transazione può leggere le modifiche effettuate da un altra transazione non ancora completata (committed) Di fatto, una transazione legge un dato intermedio e non persistente a tutti gli effetti Nell esempio, T1 legge un valore modificato da T2, che poi non ha buon fine (fa rollback). La modifica eseguita da T1 è pertanto inconsistente. A.Poggi 19

Unrepeatable Read Esempio Tempo T1 T2 X t1 begintrans 100 t2 read(x,t) begintrans 100 t3 read(x,s) 100 t4 s := s+100 100 t5 write (X,s) 200 t6 commit 200 t7 read(x,v) 200 t8 commit 200 A.Poggi 20

Unrepeatable read Si può verificare quando una transazione può scrivere su un oggetto letto da un altra transazione non ancora completata (committed) può quindi accadere che: T1 legge due valori diversi per lo stesso dato in momenti diversi (e T2 scrive un oggetto precedentemente letto da T1) unrepetable read A.Poggi 21

Phantom read Esempio Tempo T1 T2 X t1 begintrans {A,B,C} t2 begintrans read(x,t) {A,B,C} t3 read(x,s) v:=count( t ) {A,B,C} t4 insert(d,s) {A,B,C} t5 write(x,s) {A,B,C,D} t6 commit commit {A,B,C,D} A.Poggi 22

Phatom read Si può verificare quando quando si modifica un insieme di tuple che è stato letto da un altra transazione, e.g. quando una transazione aggiunge delle tuple in una tabella che soddisfano la clausola WHERE di uno statement eseguito da un altra transazione A.Poggi 23

Lost Update Esempio Tempo T1 T2 X t1 begintrans 100 t2 begintrans read(x,t) 100 t3 read(x,s) t := t+100 100 t4 s := s-10 write (X,t) 200 t5 write(x,s) commit 90 t6 commit 90 A.Poggi 24

Lost Update Si può verificare quando una transazione può scrivere su un oggetto già scritto da un altra transazione non ancora completata (committed) gli effetti della transazione T2 sono annullati, giacché T1 sovrascrive l aggiornamento effettuato da T2 Come nei casi precedenti, se T1 e T2 fossero eseguite in modo sequenziale, il risultato sarebbe differente A.Poggi 25

Inconsistent analysis Esempio Si abbiano tre dati X,Y,Z con un vincolo di integrità: X+Y+Z=100. Tempo T1 T2 X Y Z t+s+v t1 begintrans 20 30 50 t2 read(x,t) begintrans 20 30 50 t3 read(y,s) read(y,s ) 20 30 50 t4 s := s -10 20 30 50 t5 read(z,v ) 20 30 50 t6 v := v +10 20 30 50 t7 write(y,s ) 20 20 50 t8 write(z,v ) 20 20 60 t9 read(z,v) commit 20 20 60 110 t10 commit 20 20 60 110 A.Poggi 26

Inconsistent analysis Esempio Si può verificare quando una transazione può scrivere su un oggetto legato ad un altro oggetto da un vincolo di integrità e letto da un altra transazione non ancora completata (committed) la transazione T1 osserva solo in parte gli effetti di T2, e pertanto il valore s+t+v(=110) calcolato da T1 è inconsistente ( 100), sebbene T2 e T1 (considerate da sole) preservino l integrità inconsistent analysis A.Poggi 27

Lock Per evitare anomalie nelle transazioni concorrenti, i DBMS usano i lock, che sono meccanismi che bloccano l accesso da parte di altre transazioni, ai dati ai quali una transazione accede (o che modifica). I lock possono essere a livello di riga o di tabella. In genere i lock sono di due tipi: condivisi (possono essere imposti da due diverse transazioni contemporaneamente) o esclusivi (se una transazione ha questo tipo di lock su di un oggetto, nessun altra transazione può avere un lock - di qualsiasi tipo - sull oggetto in questione). A.Poggi 28

Protocollo 2 Phase Locking (2PL) 1. Una transazione T che vuole leggere (risp. modificare) un oggetto deve prima richiedere un lock condiviso (risp. esclusivo). T resterà sospesa fino a che il DBMS non sia in grado di garantire il lock richiesto 2. Le richieste di lock da parte delle transazioni concorrenti precedono le operazioni di rilascio dei lock. Tale protocollo permette solo l esecuzione di transazioni sicure (cioè senza anomalie). Suoi opportuni rilassamenti fanno convivere l esecuzione di transazioni con alcune anomalie, a seconda del livello di isolamento specificato. A.Poggi 29

Transazioni in SQL / 1 L SQL permette di impostare due caratteristiche di una transazione: il modo di accesso, che può essere READ ONLY oppure READ WRITE transazioni con modalità di accesso READ ONLY non potranno eseguire INSERT, UPDATE, DELETE, CREATE, etc.; come tali, potranno richiedere solo lock condivisi (aumentando la concorrenza) SET TRANSACTION READ ONLY A.Poggi 30

Transazioni in SQL / 2 il livello di isolamento, che determina in quale misura la transazione è esposta alla azione di altre transazioni concorrenti Impostare un livello di isolamento con SQL SET TRANSACTION ISOLATION LEVEL <livello> A.Poggi 31

Livelli di isolamento in SQL / 1 Lo standard SQL-92 definisce 4 livelli di isolamento, basandosi sulla definzione classica di serializzabilità, e su 3 tipi di anomalie: dirty read, non-repeatable read e phantom. A.Poggi 32

Phantom Esempio 1. La transazione T1 legge un insieme di dati che soddisfano alcune condizioni di ricerca <search condition>. 2. La transazione T2 crea un insieme di dati che soddisfano le condizioni <search condition> e fa commit. 3. T1 ripete lo stesso tipo di lettura effettuato in precedenza, ovvero un insieme di dati che soddisfano <search condition> T1 ottiene un insieme di dati diverso rispetto alla prima lettura. A.Poggi 33

Livelli di isolamento in SQL / 2 La definizione dei livelli di isolamento è tale da ammettere diverse implementazioni (non solo il locking), ed è definita secondo la seguente matrice: Livello Dirty Read Unrepeatable Phantom Read Read READ UNCOMMITTED SI SI SI READ COMMITTED NO SI SI REPEATABLE READ NO NO SI SERIALIZABLE NO NO NO Lo standard specifica inoltre che il livello di isolamento SERIALIZABLE garantisce che NESSUNA anomalia possa occorrere. A.Poggi 34

Read uncommitted È il livello di isolamento più basso. T può leggere i cambiamenti fatti da una transazione in corso T non può effettuare cambiamenti (richiede la modalità READ ONLY) Evita solo le anomalie di tipo lost-update (perchè la modalità è READ ONLY) A.Poggi 35

Read committed 1. Una transazione T leggerà solo i cambiamenti apportati da transazioni concluse con successo. 2. Nessun valore scritto da T verrà cambiato da un altra transazione. Evita le anomalie dirty read (grazie a 1), lost update (grazie a 2), ma non: le unrepeatable read (poichè gli oggetti solo letti da una transazione T potranno essere scritti da altre transazioni non ancora concluse) le phantom read le inconsistent analysis A.Poggi 36

Repeatable read 1. Una transazione T leggerà solo i cambiamenti apportati da transazioni concluse con successo. 2. Nessun valore scritto da T verrà cambiato da un altra transazione. 3. Nessun valore letto da T verrà cambiato da un altra transazione. Evita le anomalie dirty read (grazie a 1), lost update (grazie a 2), le unrepeatable read (grazie a 3), ma non le phantom read e neanche le inconsistent analysis (poichè altre transazioni potranno modificare valori non letti da T ma legati da qualche vincolo a valori letti da T). A.Poggi 37

Serializable Quale che sia l implementazione del controllo di concorrenza adottata nel DBMS, questo livello garantisce che tutte le operazioni delle transazioni siano eseguite come se ogni transazione occorresse una dopo l altra, in maniera isolata. A.Poggi 38

Livelli di isolamento e 2PL / 1 SERIALIZABLE la transazione è gestita secondo il 2PL REPEATABLE READ vengono acquisiti blocchi condivisi per tutti i dati letti da ogni istruzione della transazione e tali blocchi vengono mantenuti attivi fino al completamento della transazione impedisce ad altre transazioni di modificare qualsiasi riga letta dalla transazione corrente altre transazioni possono inserire nuove righe, se tali righe corrispondono alle condizioni di ricerca delle istruzioni eseguite dalla transazione corrente A.Poggi 39

Livelli di isolamento e 2PL / 2 READ COMMITTED prima di scrivere gli oggetti la transazione ottiene lock esclusivi che conserva fino a quando termina; prima di leggere gli oggetti ottiene lock condivisi che però rilascia immediatamente dopo READ UNCOMMITTED Non fa alcuna richiesta di lock A.Poggi 40

Livelli di isolamento supportati da MySQL 1. READ UNCOMMITTED 2. READ COMMITTED 3. REPEATABLE READ 4. SERIALIZABLE Il livello REPEATABLE READ è il default. A.Poggi 41

Leggere ed Impostare il livello di isolamento tramite l interprete dei comandi MySQL Impostare un livello di isolamento SET TRANSACTION ISOLATION LEVEL <livello> Leggere il livello di isolamento della sessione corrente mysql> SELECT @@tx_isolation; +-----------------+ @@tx_isolation +-----------------+ REPEATABLE-READ +-----------------+ 1 row in set (0.03 sec) A.Poggi 42

Gestire l autocommit tramite l interprete dei comandi MySQL Impostare lo stato dell autocommit SET AUTOCOMMIT {1 0} Leggere lo stato dell autocommit mysql> SELECT @@autocommit; +--------------+ @@autocommit +--------------+ 1 +--------------+ 1 row in set (0.03 sec) autocommit=1, e quindi attivo, è lo stato di default. A.Poggi 43