Devo aggiungere read commit dopo SET TRANSACTION ISOLATION LEVEL SERIALISABLE?


9

All'interno di una procedura memorizzata, ho il seguente: (sql server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

Dal momento che questo è basato sulle transazioni, il mio pensiero era che il resto delle connessioni al database non saranno influenzate dal SERIALIZZABILE.

Devo impostare implicitamente il livello di isolamento per leggere il commit dopo il mio commit? Ciò influirà negativamente su altre connessioni tra il mio server applicazioni e il server database?

Risposte:


6

Il comando è TRANSACTION ISOLATION LEVELno SERVER ISOLATION LEVEL. Modifica solo il livello di isolamento per l'ambito della transazione.


5

No, non è necessario reimpostare implicitamente il livello di isolamento per leggere il commit.

Dai libri online .

Se si emette SET LEACEL ISOLATION LEVEL in una procedura memorizzata o in un trigger, quando l'oggetto restituisce il controllo, il livello di isolamento viene ripristinato al livello in vigore quando l'oggetto è stato invocato. Ad esempio, se si imposta REPEATABLE READ in un batch e il batch chiama quindi una procedura memorizzata che imposta il livello di isolamento su SERIALIZZABILE, l'impostazione del livello di isolamento ritorna su REPEATABLE READ quando la procedura memorizzata restituisce il controllo al batch.


3

Il comando che hai pubblicato ha appena eseguito la transazione nell'SP con TRANSACTION ISOLATION LEVEL SERIALIZABLE. Altre connessioni passeranno automaticamente al livello di isolamento predefinito - leggi il commit (se non specificato esplicitamente un diverso livello di isolamento).

Esiste una serie eccellente di Paul White - Livelli di isolamento di SQL Server: una serie che ti aiuterà a capire in profondità cosa significano e fanno i diversi livelli di isolamento quando vengono utilizzati.


-3

Un algoritmo abbastanza nuovo che evita la maggior parte degli aspetti negativi degli approcci precedenti. Utilizza un approccio ottimistico, consentendo alle transazioni di procedere senza bloccare. Quando una transazione desidera eseguire il commit, viene verificata e viene interrotta se l'esecuzione non era serializzabile. Maggiori dettagli su tutti i programmi di app su: http://writeulearn.com/relational-database-transactions/


Questa non sembra essere una risposta alla domanda ....
RDFozz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.