"Quando una connessione viene chiusa e restituita al pool, viene mantenuto il livello di isolamento dall'ultima istruzione SET TRANSACTION ISOLATION LEVEL"?


8

L'articolo in linea MSDN " Isolamento snapshot in SQL Server " afferma:

  • "Un livello di isolamento ha un ambito a livello di connessione e, una volta impostato per una connessione con l'istruzione SET TRANSACTION ISOLATION LEVEL, rimane attivo fino alla chiusura della connessione o all'impostazione di un altro livello di isolamento. Quando una connessione viene chiusa e restituita al pool , viene mantenuto il livello di isolamento dall'ultima istruzione SET TRANSACTION ISOLATION LEVEL . Le connessioni successive che riutilizzano una connessione in pool utilizzano il livello di isolamento in vigore al momento in cui la connessione è in pool "

Non è un paragrafo contraddittorio ("fino a" vs. "mantenuto")?

Quindi, se "il livello di isolamento dall'ultima istruzione SET TRANSACTION ISOLATION LEVEL viene mantenuto " dopo aver chiuso la connessione e averlo restituito a un pool, come dovrebbe essere compreso:

  • che il livello di isolamento predefinito avrà un valore arbitrario (connessioni diverse nel pool avranno livelli di isolamento diversi e il suo valore dipenderà dalla riapertura della connessione)?
  • o tutti i valori predefiniti su tutte le connessioni nel pool verranno cambiati in ultimo? ma di nuovo abbastanza sconosciuto prima d'ora?

Risposte:


14

Una connessione dal pool avrà il livello di isolamento impostato dall'ultimo client per utilizzare quella connessione. Sì, è davvero così spaventoso.

In sostanza, se si modifica il livello di isolamento di una connessione, è necessario ripristinarlo esplicitamente READ COMMITTEDprima di chiudere. È meglio dichiarare esplicitamente il livello di isolamento richiesto all'inizio di qualsiasi batch, per garantire che il codice non sia influenzato da qualcun altro che sia sciatto e restituirlo al valore predefinito alla fine.

Questo comportamento, sebbene sconcertante, è apparentemente di progettazione .


Mai visto quelli "devono esplicitamente" e "Meglio è esplicitamente" negli articoli, nei libri, nei blog, nei documenti, ecc
MSDN

5

Non è un paragrafo contraddittorio ("fino a" vs. "mantenuto")?

Non per me, ma posso vedere che ci sono altri modi per leggerlo. Se vuoi che la documentazione venga aggiornata per renderla più chiara, il posto giusto per richiederlo è su Microsoft Connect . Le persone qui non gestiscono la documentazione Microsoft.

che il livello di isolamento predefinito avrà un valore arbitrario (connessioni diverse nel pool avranno livelli di isolamento diversi e il suo valore dipenderà dalla riapertura della connessione)?

Se si sta riutilizzando una connessione in pool, quindi sì, il livello di isolamento "preesistente" è quello che era in vigore all'ultima chiusura della connessione in pool. È consigliabile impostare esplicitamente il livello di isolamento necessario durante la connessione.

o tutti i valori predefiniti su tutte le connessioni nel pool verranno cambiati in ultimo? ma di nuovo abbastanza sconosciuto prima d'ora?

No.


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.