Transazioni in MySQL 4 Transazioni in MySQL 4

Slides:



Advertisements
Presentazioni simili
Meccanismi di IPC Problemi classici di IPC
Advertisements

Architettura MySQL E Motori MySQL L. Vigliano.
Database MySql.
Sicurezza e concorrenza nelle basi di dati
Unità D2 Archivi e file.
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
PHP.
1 Comandi per la manipolazione dei dati. 2 Tipi di comandi INSERT UPDATE DELETE COMANDI COMANDI 2.
Java: programmazione concorrente con condivisione di memoria
Algoritmi e Programmazione
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
1 Processi e Thread Meccanismi di IPC (1). 2 Comunicazioni fra processi/thread Processi/thread eseguiti concorrentemente hanno bisogno di interagire per.
Mantenimento dello stato Laboratorio Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
G. Mecca – – Università della Basilicata Basi di Dati Tecnologia di un DBMS: Concorrenza e Affidabilità Concetti Avanzati versione 2.0.
SCUOLA INTERUNIVERSITARIA SICILIANA DI SPECIALIZZAZIONE PER LINSEGNAMENTO SECONDARIO Classe di Concorso: 42A Massimo Mancino MODULO DIDATTICO - Ambienti.
SQL Structured Query Language
La Modifica dei Dati in una Base Dati La modifica dei dati contenuti allinterno di una base dati è unoperazione delicata Infatti, ogni potenziale problema.
Risorse e Stallo.
Esercitazione 5 MySQL Laboratorio di Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Tecnologie di un database server: la gestione della concorrenza
Basi di dati attive Paolo Atzeni.
Aspetti sistemistici dellSQL. SQL environment Un SQL environment è un framework dove esistono dati e possono aversi istruzioni SQL eseguite su questi.
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Sincronizzazione fra thread
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.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Transazioni.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
SQL basato su ANSI (American National Standards Institute) – standard SQL SQL – Structured Query Language è un linguaggio dichiarativo e permette di comunicare.
Basi di dati Claudia Raibulet
Cos’è una transazione? Una transazione è un’unità logica di elaborazione richiesta da un’applicazione che dà luogo a una serie di operazioni fisiche elementari.
Basi di Dati e Sistemi Informativi
BIOINFO3 - Lezione 361 RICERCA DI SIMILARITA TRA SEQUENZE Un altro problema comunissimo in bioinformatica è quello della ricerca di similarità tra sequenze.
BIOINFO3 - Lezione 321 ACCESSO REMOTO AL SERVER SIBILLA Attraverso Internet è possibile accedere al server sibilla.cribi.unipd.it. Potrete così effettuare.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
BIOINFO3 - Lezione 41 ALTRO ESEMPIO ANCORA Progettare il comando di creazione di una tabella di pubblicazioni scientifiche. Come chiave usare un numero.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
Microsoft Access Chiavi, struttura delle tabelle.
Architettura Centralizzata di un DBMS Relazionale
FUNZIONI Dichiarazione: Definizione:
Pagine ASP parte 3 I data base Stefano Schacherl.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: –COMMIT –SAVEPOINT nome_punto.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
MySQL Database Management System
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.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
Vincoli interrelazionali
1 Risorse e Stallo 2 Risorse (1) Esempi di risorse –stampanti –nastri –tabelle I processi devono accedere alle risorse in un ordine ragionevole Supponiamo.
LA FILOSOFIA DEL SAS Concepito per essere facilmente accessibile.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Integrazione con e /. Integrazione e/ - Banche24 Aggiornamenti previsti nel 2012 Sono previsti due momenti di rilascio per le funzionalità di integrazione.
Le basi di dati.
Basi di Dati attive. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Definizione Una base di dati si dice attiva quando dispone.
Anno Architetture dati DBMS Centralizzati Controllo di concorrenza Carlo Batini.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
Anno Architetture dati - DBMS Centralizzati Recovery management Carlo Batini.
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: COMMIT SAVEPOINT nome_punto.
Transcript della presentazione:

Transazioni in MySQL 4 Transazioni in MySQL 4 Francesco Brancati – francesco.brancati@gmail.com Cristina Pucci – cristinapucci@inwind.it

Transazioni vs Operazioni Atomiche (1) MySQL supporta le transazioni con i metodi di memorizzazione InnoDB e BDB (BerkleyDB) InnoDB permette di ottenere transazioni ACID Atomic, Consistent, Isolated, Durability Altri metodi di MySQL (come MyISAM) seguono un’altra filosofia per l’integrità dei dati: “Atomic Operations” In pratica le tabelle MyISAM operano in modalità autocommit=1 Il commit viene eseguito automaticamente dopo ogni transazione Interazione tra basi di dati e web Transazioni

Transazioni vs Operazioni Atomiche (2) Pro Maggiori funzionalità (rollback, savepoint, etc) Contro Necessitano di più memoria sul disco Comportano un maggior uso della CPU Operazioni Atomiche Maggiore velocità a parità di integrità di dati Problemi più difficili da codificare Interazione tra basi di dati e web Transazioni

Transazioni vs Operazioni Atomiche (3) Le transazioni assicurano che gli update non finiti o archivi corrotti non vengano scritti sul database Il server dà l’opportunità di fare rollback automatici e di salvare il database Le operazioni atomiche possono essere rese altrettanto sicure includendo controlli prima degli updates ed eseguendo script che controllano l’integrità del database riparandolo automaticamente o comunque avvisando in caso di inconsistenze Si usano i log di MySQL per ripristinare correttamente le tabelle senza perdita nell’ integrità dei dati Interazione tra basi di dati e web Transazioni

Transazioni vs Operazioni Atomiche (4) In genere tutti i problemi d’integrità che le transazioni risolvono, possono essere risolti anche con l’uso di LOCK TABLES ed operazioni atomiche, escludendo i crash di sistema Non esistono DBMS in grado di garantire l’integrità di dati al 100% In MySQL è sufficiente tenere i backup dei dati ed i log binari attivati per recuperare ogni possibile situazione che possa essere recuperata con un qualsiasi altro database transazionale Interazione tra basi di dati e web Transazioni

COMMIT e ROLLBACK Di default MySQL ha la variabile AUTOCOMMIT abilitata Appena si esegue un statement che comporta una modifica al database, MySql memorizza il risultato sul disco Con tabelle transazionali è necessario disabilitare autocommit per sfruttare la funzionalità di rollback Set autocommit=0; Attenzione: quando autocommit è disabilitata è necessario fare sempre il commit per rendere permanenti i cambiamenti Interazione tra basi di dati e web Transazioni

START TRANSACTION Se si vuole disabilitare temporaneamente AUTOCOMMIT per una serie di statement si usa START TRANSACTION START TRANSACTION; SELECT * FROM table1 WHERE type=1; UPDATE table2 SET summary=“A” WHERE type=1; COMMIT; Autocommit rimane disabilitata finché non si esegue un commit o un rollback E’posibile modificare il livello di isolamento della transazione (globalmente o per la sessione corrente) utilizzando SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ (default), SERIALIZABLE Interazione tra basi di dati e web Transazioni

Statement che causano un COMMIT implicito Ognuno dei seguenti comandi implicitamente termina una transazione, come se fosse eseguito un COMMIT prima di eseguire il comando: Comandi che non ammettono ROLLBACK In genere, tutti i comandi DDL (create, drop, alter, etc.) Le transazioni non dovrebbero contenere suddetti comandi che invaliderebbero l’effetto di un rollback. ALTER TABLE BEGIN CREATE INDEX DROP DATABASE DROP INDEX DROP TABLE LOAD MASTER DATA LOCK TABLES RENAME TABLE SET AUTOCOMMIT=1 START TRANSACTION TRUNCATE TABLE Interazione tra basi di dati e web Transazioni

SAVEPOINT e ROLLBACK TO SAVEPOINT Lo statement SAVEPOINT permette di salvare lo stato di una transazione. Se la transazione corrente ha un savepoint con lo stesso nome, il vecchio savepoint viene cancellato e ne viene settato uno nuovo. SAVEPOINT identifier ROLLBACK TO SAVEPOINT riporta una transazione al savepoint nominato. Le modifiche che la transazione corrente fa dopo il savepoint risultano nulle. ROLLBACK TO SAVEPOINT identifier Interazione tra basi di dati e web Transazioni

LOCK TABLES ed UNLOCK TABLES (1) Sintassi: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...UNLOCK TABLES LOCK TABLES blocca una o più tabelle per il processo corrente. UNLOCK TABLES rilascia ogni lock mantenuto dal processo corrente. Tutte le tabelle bloccate dal processo corrente sono implicitamente sbloccate quando il processo dichiara un altro LOCK TABLES o quando la connessione al server viene chiusa Interazione tra basi di dati e web Transazioni

LOCK TABLES ed UNLOCK TABLES (2) Quando si usa LOCK TABLES è nesessario bloccare tutte le tabelle che si utilizzeranno nelle query. Non è possibile accedere a nessun’altra tabella non bloccata Non è possibile usare più volte una tabella bloccata in una singola query: si usano gli alias. mysql> LOCK TABLES t WRITE, t AS t1 WRITE; mysql> INSERT INTO t SELECT * FROM t; ERROR 1100: Table 't' was not locked with LOCK TABLES mysql> INSERT INTO t SELECT * FROM t AS t1; Bloccando la tabella non si bloccano anche gli alias e viceversa mysql> LOCK TABLES t READ; mysql> SELECT * FROM t AS myalias; ERROR 1100: Table 'myalias' was not locked with LOCK TABLES Interazione tra basi di dati e web Transazioni

LOCK TABLES e tabelle transazionali LOCK TABLES non è transaction-safe ed esegue un commit implicito di ogni transazione attiva prima di provare a bloccare le tabelle Iniziare una transazione (es. con START TRANSACTION) implicitamente causa un UNLOCK TABLES. Uso corretto di LOCK TABLES con tabelle transazionali (InnoDB): impostare AUTOCOMMIT = 0 non eseguire UNLOCK TABLES prima del commit esplicito della transazione. Quando si fa un LOCK TABLES, InnoDB blocca internamente le tabelle, e MySQL fa lo stesso. InnoDB rilascia il lock al successivo commit, mentre MySQL rilascerà il proprio solo quando verrà chiamato UNLOCK TABLES. Se AUTOCOMMIT = 1 InnoDB rilascia il blocco immediatamente dopo la chiamata a LOCK TABLES e si possono facilmente verificare deadlock. A partire dalla versione 4.1.9 non viene acquisito il lock da InnoDB se AUTOCOMMIT=1. ROLLBACK non rilascia i lock delle tabelle Interazione tra basi di dati e web Transazioni

LOCK TABLES e tabelle non transazionali Tecniche per lavorare con tabelle che non supportano transazioni: Usare LOCK TABLES per bloccare le tabelle a cui si vuole accedere Testare le condizioni che devono essere vere prima di realizzare l’update Eseguire l’update solo se tutto è a posto Usare UNLOCK TABLES per rilasciare i blocchi Solitamente questo metodo è più veloce dell’utilizzo di transazioni con possibile rollback. Problema: Se il processo viene terminato nel mezzo di un update, tutti i lock vengono rilasciati, e non è garantito che tutti gli update siano stati eseguiti Interazione tra basi di dati e web Transazioni

READ e WRITE LOCK Se un processo ottiene un READ LOCK su una tabella, questo e tutti gli altri processi potranno solo leggere dalla tabella. Se un processo ottiene un WRITE LOCK su una tabella, solo il processo che ha bloccato può scrivere sulla tabella. Gli altri sono bloccati in scrittura finchè il lock non viene rilasciato. Differenza fra READ LOCAL e READ: READ LOCAL permette l’esecuzione di istruzioni INSERT non-conflicting (concorrenti) durante il blocco della tabella. Per InnoDB READ LOCAL non esegue il lock delle tabelle. L’uso di READ LOCAL per tabelle InnoDB è sconsigliato, si ottiene lo stesso risultato facendo una SELECT senza dover inserire nessun blocco. Interazione tra basi di dati e web Transazioni

WRITE LOCK I lock in scrittura normalmente hanno priorità maggiore dei lock in lettura, questo assicura che gli update siano processati il prima possibile. Se un processo ottiene un READ lock ed un altro richiede un WRITE lock, le richiese di READ lock seguenti attenderanno finquando il processo scrittore abbia ottenuto il WRITE lock e lo abbia rilasciato Si possono usare blocchi LOW_PRIORITY WRITE per permettere agli altri processi di ottenere READ lock mentre il processo attende per il WRITE lock. Si dovrebbero usare LOW_PRIORITY WRITE locks solo se si è sicuri che ci sarà un momento in cui nessun processo chiederà un READ lock. Interazione tra basi di dati e web Transazioni

LOCK TABLES e DEADLOCK Algoritmo di LOCK TABLES : Ordina in un modo predefinito dal sistema tutte le tabelle che devono essere bloccate. Se una tabella deve essere bloccata sia con un read che con un write lock, sposta il write lock prima del read lock. Blocca una tabella per volta finché il processo non ottiene tutti i lock richiesti. Questa politica assicura che il bloccaggio della tabella non provochi deadlock. Interazione tra basi di dati e web Transazioni

Esempio sull’uso di LOCK TABLES Questo esepio richiede LOCK TABLES per un’esecuzione “safe” mysql> LOCK TABLES fatture READ, fornitori WRITE; mysql> SELECT SUM(importo) FROM fatture WHERE fornitore_id=qualche_id; mysql> UPDATE fornitori -> SET totale=somma_precedente -> WHERE fornitore_id=qualche_id; mysql> UNLOCK TABLES; senza LOCK TABLES è possibile che un altro processo inserisca una nuova riga nella tabella fatture tra l’esecuzione della SELECT e l’UPDATE. Interazione tra basi di dati e web Transazioni

Risorse http://freephp.html.it/ http://www.risorse.net/ http://www.php.net/ http://smarty.php.net/ http://www.mysql.com/ Interazione tra basi di dati e web Risorse