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à.
Livelli di isolamento delle transazioni in Babelfish
Babelfish supporta i livelli di isolamento delle transazioni, e. READ UNCOMMITTED
READ COMMITTED
SNAPSHOT
A partire dalla versione Babelfish 3.4 sono supportati livelli REPEATABLE READ
di isolamento aggiuntivi. SERIALIZABLE
Tutti i livelli di isolamento di Babelfish sono supportati dal comportamento dei corrispondenti livelli di isolamento in Postgre. SQL SQL Server e Babelfish utilizzano diversi meccanismi sottostanti per implementare i livelli di isolamento delle transazioni (blocco per l'accesso simultaneo, blocchi bloccati dalle transazioni, gestione degli errori ecc.). Inoltre, ci sono alcune sottili differenze nel modo in cui l'accesso simultaneo può funzionare per diversi carichi di lavoro. Per ulteriori informazioni su questo SQL comportamento di Postgre, consulta Transaction Isolation.
Argomenti
Panoramica dei livelli di isolamento delle transazioni
I livelli di isolamento delle transazioni originali del SQL Server si basano su un blocco pessimistico in cui esiste solo una copia dei dati e le query devono bloccare risorse come le righe prima di accedervi. Successivamente, è stata introdotta una variazione del livello di isolamento. READ COMMITTED
Ciò consente l'uso di versioni di riga per fornire una migliore concorrenza tra lettori e scrittori utilizzando un accesso non bloccante. Inoltre, è disponibile un nuovo livello di isolamento denominatoSNAPSHOT
. Utilizza inoltre le versioni di riga per fornire una concorrenza migliore rispetto al livello di REPEATABLE READ
isolamento, evitando blocchi condivisi sui dati di lettura che vengono conservati fino alla fine della transazione.
A differenza di SQL Server, tutti i livelli di isolamento delle transazioni in Babelfish si basano su optimistic Locking (). MVCC Ogni transazione visualizza un'istantanea dei dati all'inizio dell'istruzione (READ COMMITTED
) o all'inizio della transazione (REPEATABLE READ
,SERIALIZABLE
), indipendentemente dallo stato corrente dei dati sottostanti. Pertanto, il comportamento di esecuzione delle transazioni simultanee in Babelfish potrebbe differire da quello di Server. SQL
Ad esempio, si consideri una transazione con livello di isolamento inizialmente bloccata in SQL Server ma SERIALIZABLE
che ha esito positivo in seguito. Potrebbe finire per fallire in Babelfish a causa di un conflitto di serializzazione con una transazione simultanea che legge o aggiorna le stesse righe. Potrebbero esserci anche casi in cui l'esecuzione di più transazioni simultanee produca un risultato finale diverso in Babelfish rispetto a Server. SQL Le applicazioni che utilizzano livelli di isolamento devono essere accuratamente testate per verificare la presenza di scenari di concorrenza.
Livelli di isolamento nel server SQL | Livello di isolamento di Babelfish | Livello di isolamento SQL Postgree | Commenti |
---|---|---|---|
|
|
|
|
|
|
|
SQL |
|
|
|
Entrambi sono basati su snapshot () MVCC ma non esattamente uguali. |
|
|
|
Esattamente lo stesso. |
|
|
|
SQL |
|
|
|
SQL |
Nota
I suggerimenti della tabella non sono attualmente supportati e il loro comportamento è controllato utilizzando l'escape hatch predefinito di Babelfish. escape_hatch_table_hints
Impostazione dei livelli di isolamento delle transazioni
Utilizzate il seguente comando per impostare il livello di isolamento delle transazioni:
SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }
Abilitazione o disabilitazione dei livelli di isolamento delle transazioni
I livelli di REPEATABLE READ
isolamento delle transazioni SERIALIZABLE
sono disabilitati di default in Babelfish e devi abilitarli esplicitamente impostando babelfishpg_tsql.isolation_level_serializable
o babelfishpg_tsql.isolation_level_repeatable_read
escape hatch su use. pg_isolation
sp_babelfish_configure
Per ulteriori informazioni, consulta Gestione degli errori di Babelfish con escape hatch.
Di seguito sono riportati alcuni esempi per abilitare o disabilitare l'uso di REPEATABLE READ
e SERIALIZABLE
nella sessione corrente impostando i rispettivi escape hatch. Facoltativamente, includi il server
parametro per impostare l'escape hatch per la sessione corrente e per tutte le nuove sessioni successive.
Per abilitare l'uso di solo SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
nella sessione corrente.
EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation'
Per consentire l'uso di SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
nella sessione corrente e in tutte le nuove sessioni successive.
EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation', 'server'
Per disabilitare l'uso della SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
sessione corrente e delle nuove sessioni successive.
EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'off', 'server'
Per abilitare l'uso di solo SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
nella sessione corrente.
EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation'
Per consentire l'uso di SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
nella sessione corrente e in tutte le nuove sessioni successive.
EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation', 'server'
Per disabilitare l'uso della SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
sessione corrente e delle nuove sessioni successive.
EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'off', 'server'