17

Domanda semplice?Perché READ_COMMITTED_SNAPSHOT non è attivo per impostazione predefinita?

Perché READ_COMMITTED_SNAPSHOT non è attivo per impostazione predefinita?

Sto indovinando compatibilità con le versioni precedenti, prestazioni o entrambi?

[Modifica] Nota che sono interessato all'effetto relativo al livello di isolamento READ_COMMITTED e non al livello di isolamento dello snapshot.

Perché si tratta di una modifica, poiché contiene meno blocchi e continua a non leggere righe non impegnate?

risposta

15

Entrambi. Per lo più compatibilità.

L'attivazione dell'istantanea per impostazione predefinita interromperà la maggior parte delle applicazioni che prevedono il vecchio comportamento di blocco. L'istantanea rende pesante l'uso di tempdb per l'archivio versione e il suo impatto sulle prestazioni è abbastanza misurabile.

+5

L'utilizzo di molte serrature non influisce sulle prestazioni? –

+2

Potresti elaborare come questo può rompere un'applicazione che "fa affidamento sul comportamento di blocco"? Ho fatto molte ricerche e non riesco a capire come qualcuno possa arrivare a questa conclusione. –

4

Cambia la strategia di blocco predefinita da come la famiglia Sybase/SQL Server ha funzionato per sempre. Romperebbe tutte le mie applicazioni, tutte le applicazioni che conosco nel mio negozio, e corromperò un sacco di dati importanti.

Leggi Wikipedia articlecompletamente: vuoi il codice dietro la tua app bancaria per utilizzare questo modello di isolamento?

In generale, quindi, istantanea isolamento mette alcuni dei problemi di mantenere vincoli non banali sull'utente, che non può apprezzare sia potenziali insidie ​​oi possibili soluzioni. Il vantaggio di questo trasferimento è una prestazione migliore.

È un compromesso come la maggior parte dei progetti di database. Nel mio caso, posso gestire le attese di blocco/deadlock (rare) come prezzo per un'integrità dei dati più semplice e immediata. Devo ancora imbattersi in un problema o problema in cui vedo l'isolamento dell'istantanea come una soluzione.

+2

È possibile elaborare come READ_COMMITTED_SNAPSHOT potrebbe portare a dati danneggiati? –

18

Accensione istantanea di default avrebbe rotto la maggior parte delle applicazioni

Non è chiaro a me se si romperà la "stragrande maggioranza" delle applicazioni. Oppure, se si romperà molte applicazioni in modi che sono difficili da identificare e/o difficili da risolvere. La documentazione di SQL Server indica che READ COMMITTED e READ COMMITTED SNAPSHOT soddisfano entrambi la definizione ANSI di READ COMMITTED. (Dichiarato qui: http://msdn.microsoft.com/en-us/library/ms189122.aspx) Quindi, se il tuo codice non si basa su qualcosa che va oltre il comportamento letterale richiesto da ANSI, in teoria, starai bene.

Una complicazione è che la specifica ANSI non cattura tutto ciò che le persone comunemente pensano che cose come lettura sporca, lettura sfocata/non ripetibile, ecc. Significano nella pratica. E, ci sono anomalie (consentite dalle definizioni ANSI) che possono verificarsi sotto READ COMMITTED SNAPSHOT che non possono verificarsi in READ COMMITTED. Per un esempio, vedere http://www.jimmcleod.net/blog/index.php/2009/08/27/the-potential-dangers-of-the-read-committed-snapshot-isolation-level/.

Vedere anche http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/d1b3d46e-2642-4bc7-a68a-0e4b8da1ca1b.

Per informazioni dettagliate sulle differenze tra i livelli di isolamento, iniziare con http://www.cs.umb.edu/cs734/CritiqueANSI_Iso.pdf (READ_COMMITTED_SNAPSHOT non era intorno quando questo documento è stato scritto, ma gli altri livelli sono coperti da esso).

+0

In realtà, (Forse è cambiato), la risposta è questa: _Impostazione dello snapshot di default interromperà la maggior parte delle applicazioni ** che si aspettano il vecchio, blocco, comportamento ** _. La mia comprensione è che esistono applicazioni esistenti che fanno affidamento su questa strategia di blocco pessimistica, che dovrebbe essere sospesa in attesa dell'acquisizione del blocco. –

Problemi correlati