2010-08-12 14 views

risposta

39

Ponetevi la seguente domanda: Sarebbe male se qualcuno inserisse una nuova riga nei dati mentre la transazione è in esecuzione? Questo interferirebbe con i risultati in modo inaccettabile? In tal caso, utilizzare il livello SERIALIZABLE.

Da MSDN regarding SET TRANSACTION ISOLATION LEVEL:

SERIALIZABLE

imposta un blocco intervallo sul set di dati, impedendo altri utenti di aggiornare o inserimento di righe nei dati impostati finché la transazione è stata completata. Questo è il più restrittivo dei livelli di isolamento . Poiché la concorrenza è inferiore, utilizzare questa opzione solo quando necessario. Questa opzione ha lo lo stesso effetto dell'impostazione di HOLDLOCK su tutte le tabelle in tutte le istruzioni SELECT nella transazione .

Così la transazione mantiene tutti i lucchetti per tutta la sua durata, anche quelli normalmente scartati dopo l'uso. Questo fa sembrare che tutte le transazioni siano in esecuzione una alla volta, da qui il nome SERIALIZABLE. Nota da Wikipedia regarding isolation levels:

SERIALIZABLE livello

Questo isolamento specifica che tutte le transazioni avvengono in modo completamente isolato; Ad esempio, come se tutte le transazioni nel sistema avessero eseguite in serie, una dopo l'altra . Il DBMS può eseguire due o più transazioni allo stesso tempo solo se l'illusione dell'esecuzione seriale può essere mantenuta.

+0

Un riferimento valido e correlato: (isolamento serializzabile vs snapshot) http://blogs.msdn.com/b/craigfr/archive/2007/05/16/serializable-vs-snapshot-isolation-level.aspx –

+0

Ecco il collegamento aggiornato a ['SET TRANSACTION ISOLATION LEVEL' da MSDN] (https://msdn.microsoft.com/en-us/library/ms173763.aspx) –

+0

@AlexYursha Grazie, ho aggiornato il post. –

3

Prova contabilità. Le transazioni negli account sono intrinsecamente serializzabili se si desidera avere i valori dell'account appropriati e aderire a cose come i limiti di credito.

Problemi correlati