Domanda

Domanda semplice?

Perché è READ_COMMITTED_SNAPSHOT non è attivo per impostazione predefinita?

Immagino che sia la compatibilità con le versioni precedenti, le prestazioni o entrambi?

[Modificare] Tieni presente che mi interessa l'effetto relativo al livello di isolamento READ_COMMITTED e non al livello di isolamento dello snapshot.

Perché questa sarebbe una modifica sostanziale, poiché contiene meno blocchi e continua a non leggere le righe non impegnate?

È stato utile?

Soluzione

Entrambi. Per lo più la compatibilità.

Accensione istantanea di default avrebbe rotto la maggior parte delle applicazioni che prevedono il vecchio, il blocco, il comportamento. Snapshot fa pesante uso di tempdb per l'archivio di versione e il suo impatto sulle prestazioni è molto misurabile.

Altri suggerimenti

  

Accensione istantanea di default avrebbe rotto la maggior parte delle applicazioni

Non è chiaro a me se si romperà la "stragrande maggioranza" delle applicazioni. O, se si romperà molte applicazioni in modi che sono difficili da identificare e / o difficili da risolvere. La documentazione di SQL Server afferma che READ COMMITTED e READ COMMITTED SNAPSHOT entrambi soddisfano la definizione di ANSI READ COMMITTED. (Detto qui: http://msdn.microsoft.com/en-us/library /ms189122.aspx ) Così, a patto che il codice non si basa su nulla al di là del comportamento letterale ANSI-richiesta, in teoria, si sarà a posto.

Una complicazione è che la specifica ANSI non cattura tutto ciò che la gente pensa comunemente cose come lettura sporca, fuzzy / lettura non ripetibile, ecc significano in pratica. E, ci sono anomalie (consentiti dalle definizioni ANSI) che possono verificarsi in READ COMMITTED SNAPSHOT che non può 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 / .

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

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

Cambia la strategia di blocco predefinita rispetto a come la famiglia Sybase/SQL Server ha funzionato per sempre.Danneggerebbe tutte le mie applicazioni, tutte le applicazioni che conosco nel mio negozio, e corromperebbe molti dati importanti.

Leggi il Articolo di Wikipedia completamente:vuoi che il codice dietro la tua app bancaria utilizzi questo modello di isolamento?

In generale, pertanto, l'isolamento dell'istantanea pone parte del problema di mantenere vincoli non banali sull'utente, che potrebbero non apprezzare né le potenziali insidie ​​né le possibili soluzioni.Il lato positivo di questo trasferimento è una prestazione migliore.

È un compromesso come la maggior parte dei progetti di database.Nel mio caso, posso gestire le attese/deadlock di blocco (rari) come prezzo per un'integrità dei dati più semplice e più "pronta all'uso".Devo ancora riscontrare un problema o una questione in cui vedo l'isolamento degli snapshot come soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top