Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Confronto tra i livelli di isolamento di Babelfish e SQL Server
Di seguito sono riportati alcuni esempi sulle sfumature del modo in cui SQL Server e Babelfish implementano i livelli di isolamento. ANSI
Nota
I livelli di isolamento
SNAPSHOT
sonoREPEATABLE READ
gli stessi in Babelfish.Il livello di
READ UNCOMMITTED
isolamento è lo stesso in Babelfish.READ COMMITTED
L'esempio seguente mostra come creare la tabella di base per tutti gli esempi menzionati di seguito:
CREATE TABLE employee ( id sys.INT NOT NULL PRIMARY KEY, name sys.VARCHAR(255)NOT NULL, age sys.INT NOT NULL ); INSERT INTO employee (id, name, age) VALUES (1, 'A', 10); INSERT INTO employee (id, name, age) VALUES (2, 'B', 20); INSERT INTO employee (id, name, age) VALUES (3, 'C', 30);
Argomenti
- Babelfish READ UNCOMMITTED rispetto al livello di isolamento SQL del server READ UNCOMMITTED
- Babelfish READ COMMITTED rispetto al livello di isolamento SQL del server READ COMMITTED
- Babelfish READ COMMITTED rispetto al livello di isolamento SQL del server READ COMMITTED SNAPSHOT
- Babelfish REPEATABLE READ rispetto al livello di isolamento del server SQL REPEATABLE READ
- Babelfish SERIALIZABLE rispetto al livello di isolamento SQL del server SERIALIZABLE
Babelfish READ UNCOMMITTED
rispetto al livello di isolamento SQL del server READ UNCOMMITTED
La tabella seguente fornisce dettagli sulle letture sporche quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di READ UNCOMMITTED
isolamento in SQL Server rispetto all'implementazione Babelfish.
Transazione 1 | Transazione 2 | SQLServer READ UNCOMMITTED |
Babelfish READ UNCOMMITTED |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
Inattivo in transazione |
|
Aggiornamento riuscito. |
Aggiornamento riuscito. |
Inattivo in transazione |
|
Inserimento riuscito. |
Inserimento riuscito. |
|
Inattivo in transazione |
La transazione 1 può visualizzare modifiche non confermate rispetto alla transazione 2. |
Come |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
Visualizza le modifiche apportate dalla transazione 2. |
Visualizza le modifiche apportate dalla transazione 2. |
Babelfish READ COMMITTED
rispetto al livello di isolamento SQL del server READ COMMITTED
La tabella seguente fornisce dettagli sul comportamento di blocco di lettura-scrittura quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di READ COMMITTED
isolamento in SQL Server rispetto all'implementazione Babelfish.
Transazione 1 | Transazione 2 | SQLServer READ COMMITTED |
Babelfish READ COMMITTED |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
Aggiornamento riuscito. |
Aggiornamento riuscito. |
|
Inattivo in transazione |
Fase bloccata fino al completamento della transazione 2. |
Le modifiche alla transazione 2 non sono ancora visibili. Aggiorna la riga con id=3. |
Inattivo in transazione |
|
La transazione 2 viene eseguita correttamente. La transazione 1 è ora sbloccata e vede l'aggiornamento della transazione 2. |
La transazione 2 viene eseguita correttamente. |
|
Inattivo in transazione |
La transazione 1 aggiorna la riga con id = 1. |
La transazione 1 aggiorna la riga con id = 3. |
Babelfish READ COMMITTED
rispetto al livello di isolamento SQL del server READ COMMITTED SNAPSHOT
La tabella seguente fornisce dettagli sul comportamento di blocco delle righe appena inserite quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di READ COMMITTED SNAPSHOT
isolamento in SQL Server rispetto all'implementazione READ COMMITTED
Babelfish.
Transazione 1 | Transazione 2 | SQLServer READ COMMITTED SNAPSHOT |
Babelfish READ COMMITTED |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
Il passaggio è bloccato fino al completamento della transazione 1. La riga inserita è bloccata dalla transazione 1. |
Tre righe aggiornate. La riga appena inserita non è ancora visibile. |
|
Inattivo in transazione |
Impegno riuscito. La transazione 2 è ora sbloccata. |
Impegno riuscito. |
Inattivo in transazione |
|
Tutte e 4 le righe hanno età = 99. |
La riga con id = 4 ha il valore di età 40 poiché non era visibile alla transazione 2 durante la query di aggiornamento. Le altre righe vengono aggiornate a age=99. |
Babelfish REPEATABLE READ
rispetto al livello di isolamento del server SQL REPEATABLE READ
La tabella seguente fornisce dettagli sul comportamento di blocco di lettura-scrittura quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di REPEATABLE READ
isolamento in SQL Server rispetto all'implementazione Babelfish. REPEATABLE READ
Transazione 1 | Transazione 2 | SQLServer REPEATABLE READ |
Babelfish REPEATABLE READ |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
Nessuno |
Nessuno |
Inattivo in transazione |
|
La transazione 2 è bloccata fino al completamento della transazione 1. |
La transazione 2 procede normalmente. |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
L'aggiornamento dalla transazione 1 è visibile. |
L'aggiornamento dalla transazione 1 non è visibile. |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
vede l'aggiornamento della transazione 1. |
vede l'aggiornamento della transazione 1. |
La tabella seguente fornisce dettagli sul comportamento di blocco scrittura-scrittura quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di REPEATABLE READ
isolamento in SQL Server rispetto all'implementazione Babelfish. REPEATABLE READ
Transazione 1 | Transazione 2 | SQLServer REPEATABLE READ |
Babelfish REPEATABLE READ |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
Transazione 2 bloccata. |
Transazione 2 bloccata. |
|
Inattivo in transazione |
Il commit è riuscito e la transazione 2 è stata sbloccata. |
Commit riuscito e la transazione 2 fallisce con errore, impossibile serializzare l'accesso a causa di un aggiornamento simultaneo. |
Inattivo in transazione |
|
Esecuzione riuscita. |
La transazione 2 è già stata interrotta. |
Inattivo in transazione |
|
La riga con id=1 ha name='A_ '. TX2 |
La riga con id=1 ha name='A_ '. TX1 |
La tabella seguente fornisce dettagli sul comportamento delle letture nascoste quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di REPEATABLE READ
isolamento in SQL Server rispetto all'implementazione Babelfish. REPEATABLE READ
Transazione 1 | Transazione 2 | SQLServer REPEATABLE READ |
Babelfish REPEATABLE READ |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
La transazione 2 procede senza alcun blocco. |
La transazione 2 procede senza alcun blocco. |
Inattivo in transazione |
|
La riga appena inserita è visibile. |
La riga appena inserita è visibile. |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La nuova riga inserita dalla transazione 2 è visibile. |
La nuova riga inserita dalla transazione 2 non è visibile. |
|
Inattivo in transazione |
Nessuno |
Nessuno |
|
Inattivo in transazione |
La riga appena inserita è visibile. |
La riga appena inserita è visibile. |
La tabella seguente fornisce dettagli su quando vengono eseguite transazioni simultanee e i diversi risultati finali quando si utilizza il livello di REPEATABLE READ
isolamento in SQL Server rispetto all'implementazione REPEATABLE READ
Babelfish.
Transazione 1 | Transazione 2 | SQLServer REPEATABLE READ |
Babelfish REPEATABLE READ |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
La transazione 1 aggiorna la riga con id 1. |
La transazione 1 aggiorna la riga con id 1. |
Inattivo in transazione |
|
La transazione 2 è bloccata poiché l'SELECTistruzione tenta di leggere le righe bloccate dalla UPDATE query nella transazione 1. |
La transazione 2 procede senza alcun blocco poiché la lettura non viene mai bloccata, l'SELECTistruzione viene eseguita e infine la riga con id = 3 viene aggiornata poiché le modifiche alla transazione 1 non sono ancora visibili. |
Inattivo in transazione |
|
Questo passaggio viene eseguito dopo il completamento della transazione 1. La riga con id = 1 viene aggiornata dalla transazione 2 nel passaggio precedente ed è visibile qui. |
La riga con id = 3 viene aggiornata dalla transazione 2. |
|
Inattivo in transazione |
La transazione 2 è ora sbloccata. |
Impegno riuscito. |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
Entrambe le transazioni eseguono l'aggiornamento sulla riga con id = 1. |
Le diverse righe vengono aggiornate dalle transazioni 1 e 2. |
Babelfish SERIALIZABLE
rispetto al livello di isolamento SQL del server SERIALIZABLE
La tabella seguente fornisce dettagli sugli intervalli di blocco quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di SERIALIZABLE
isolamento in SQL Server rispetto all'implementazione SERIALIZABLE
Babelfish.
Transazione 1 | Transazione 2 | SQLServer SERIALIZABLE |
Babelfish SERIALIZABLE |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
La transazione 2 è bloccata fino al completamento della transazione 1. |
La transazione 2 procede senza alcun blocco. |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La transazione 1 viene eseguita correttamente. La transazione 2 è ora sbloccata. |
La transazione 1 viene eseguita correttamente. |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La riga appena inserita è visibile. |
La riga appena inserita è visibile. |
La tabella seguente fornisce dettagli su quando vengono eseguite transazioni simultanee e i diversi risultati finali quando si utilizza il livello di SERIALIZABLE
isolamento in SQL Server rispetto all'implementazione SERIALIZABLE
Babelfish.
Transazione 1 | Transazione 2 | SQLServer SERIALIZABLE |
Babelfish SERIALIZABLE |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La transazione 1 è bloccata fino al completamento della transazione 2. |
La transazione 1 procede senza alcun blocco. |
Inattivo in transazione |
|
La transazione 2 viene eseguita correttamente. La transazione 1 è ora sbloccata. |
La transazione 2 viene eseguita correttamente. |
|
Inattivo in transazione |
Nessuno |
Nessuno |
|
Inattivo in transazione |
La riga appena inserita è visibile con valore di età = 99. |
La riga appena inserita è visibile con valore di età = 40. |
La tabella seguente fornisce i dettagli relativi INSERT
all'accesso a una tabella con vincolo univoco. Mostra i risultati osservati quando si utilizza il livello di SERIALIZABLE
isolamento in SQL Server rispetto all'implementazione SERIALIZABLE
Babelfish.
Transazione 1 | Transazione 2 | SQLServer SERIALIZABLE |
Babelfish SERIALIZABLE |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La transazione 1 è bloccata fino al completamento della transazione 2. |
La transazione 1 è bloccata fino al completamento della transazione 2. |
Inattivo in transazione |
|
La transazione 2 viene eseguita correttamente. La transazione 1 è ora sbloccata. |
La transazione 2 viene eseguita correttamente. La transazione 1 interrotta con errore «valore chiave duplicato» viola un vincolo univoco. |
|
Inattivo in transazione |
La transazione 1 viene eseguita correttamente. |
Il commit della transazione 1 ha esito negativo e non è stato possibile serializzare l'accesso a causa di dipendenze di lettura o scrittura tra le transazioni. |
|
Inattivo in transazione |
viene inserita la riga (5, 'E', 50). |
Esistono solo 4 righe. |
In Babelfish, le transazioni simultanee eseguite con Isolation Level serializable falliranno con un errore di anomalia di serializzazione se l'esecuzione di queste transazioni non è coerente con tutte le possibili esecuzioni seriali (una alla volta) di tali transazioni.
Le tabelle seguenti forniscono dettagli sull'anomalia di serializzazione quando vengono eseguite transazioni simultanee. Mostra i risultati osservati quando si utilizza il livello di SERIALIZABLE
isolamento in SQL Server rispetto all'implementazione Babelfish. SERIALIZABLE
Transazione 1 | Transazione 2 | SQLServer SERIALIZABLE |
Babelfish SERIALIZABLE |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
La transazione 2 è bloccata fino al completamento della transazione 1. |
La transazione 2 procede senza alcun blocco. |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La transazione 1 viene eseguita correttamente. |
La transazione 1 viene confermata per prima ed è in grado di eseguirla con successo. |
Inattivo in transazione |
|
La transazione 2 viene eseguita correttamente. |
Il commit della transazione 2 non riesce a causa di un errore di serializzazione, l'intera transazione è stata annullata. Riprova la transazione 2. |
|
Inattivo in transazione |
Le modifiche di entrambe le transazioni sono visibili. |
La transazione 2 è stata annullata. Vengono visualizzate solo le modifiche alla transazione 1. |
In Babelfish, l'anomalia di serializzazione è possibile solo se tutte le transazioni simultanee vengono eseguite a livello di isolamento. SERIALIZABLE
Nella tabella seguente, prendiamo l'esempio precedente ma impostiamo invece la transazione 2 sul livello di isolamento. REPEATABLE READ
Transazione 1 | Transazione 2 | SQLLivelli di isolamento del server | Livelli di isolamento di Babelfish |
---|---|---|---|
|
|
Nessuno |
Nessuna |
|
|
Nessuna |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
|
Inattivo in transazione |
Nessuno |
Nessuno |
Inattivo in transazione |
|
La transazione 2 è bloccata fino al completamento della transazione 1. |
La transazione 2 procede senza alcun blocco. |
Inattivo in transazione |
|
Nessuno |
Nessuno |
|
Inattivo in transazione |
La transazione 1 viene eseguita correttamente. |
La transazione 1 viene eseguita correttamente. |
Inattivo in transazione |
|
La transazione 2 viene eseguita correttamente. |
La transazione 2 viene eseguita correttamente. |
|
Inattivo in transazione |
Le modifiche di entrambe le transazioni sono visibili. |
Le modifiche di entrambe le transazioni sono visibili. |