Microsoft SQL Server
Livelli di isolamento e bloccaggio
Ricerca…
Osservazioni
Ho trovato questo link: è utile come riferimento: "Livelli di isolamento"
Esempi di impostazione del livello di isolamento
Esempio di impostazione del livello di isolamento:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId=1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --return to the default one
READ UNCOMMITTED
- significa che una query nella transazione corrente non può accedere ai dati modificati da un'altra transazione che non è stata ancora eseguita - nessuna lettura sporca! MA, letture non ripetibili e letture fantasma sono possibili, perché i dati possono ancora essere modificati da altre transazioni.REPEATABLE READ
- significa che una query nella transazione corrente non può accedere ai dati modificati da un'altra transazione che non è stata ancora eseguita - nessuna lettura sporca! Nessuna altra transazione può modificare i dati letti dalla transazione corrente fino a quando non viene completata, eliminando le letture NON RIPETIBILI. MA, se un'altra transazione inserisce NEW ROW e la query viene eseguita più di una volta, le righe fantasma possono apparire a partire dalla seconda lettura (se corrisponde all'istruzione where della query).SNAPSHOT
- solo in grado di restituire i dati esistenti all'inizio della query. Garantisce la coerenza dei dati. Impedisce letture sporche, letture non ripetibili e letture fantasma. Per utilizzarlo è richiesta la configurazione del DB:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-
READ COMMITTED
- isolamento predefinito del server SQL. Impedisce la lettura dei dati modificati da un'altra transazione fino al commit. Utilizza i controlli di blocco condiviso e il controllo delle versioni delle righe sulle tabelle che impedisce le letture sporche. Dipende dalla configurazione DB READ_COMMITTED_SNAPSHOT - se abilitato - viene utilizzato il controllo delle versioni delle righe. abilitare: utilizzare questo:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --return to the default one
-
SERIALIZABLE
- utilizza i blocchi fisici acquisiti e trattenuti fino alla fine della transazione, che impedisce letture sporche, letture fantasma, letture non ripetibili. MA, impatta sulle prestazioni del DataBase, perché le transazioni simultanee sono serializzate e vengono eseguite una alla volta.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;