17

Einfache Frage?Warum ist READ_COMMITTED_SNAPSHOT nicht standardmäßig aktiviert?

Warum ist READ_COMMITTED_SNAPSHOT nicht standardmäßig aktiviert?

Ich rate entweder Rückwärtskompatibilität, Leistung oder beides?

[Bearbeiten] Beachten Sie, dass ich den Effekt in Bezug auf die READ_COMMITTED-Isolationsstufe und nicht die Snapshot-Isolationsstufe interessiert bin.

Warum sollte dies eine brechende Änderung sein, da es weniger Sperren enthält und immer noch nicht festgeschriebene Zeilen liest?

Antwort

15

Beide. Hauptsächlich Kompatibilität.

Wenn Sie Snapshot standardmäßig aktivieren, wird die große Mehrheit der Anwendungen, die das alte blockierende Verhalten erwarten, beschädigt. Snapshot macht schwer Verwendung von Tempdb für den Versionsspeicher und seine Auswirkungen auf die Leistung ist durchaus messbar.

+5

Die Verwendung vieler Schlösser hat keinen Einfluss auf die Leistung? –

+2

Könnten Sie erläutern, wie dies eine Anwendung, die "auf Sperrverhalten beruht", brechen kann? Ich habe viel geforscht und kann mir nicht vorstellen, wie jemand zu dieser Schlussfolgerung kommen könnte. –

4

Es ändert die Standardsperrstrategie dahingehend, wie die Sybase/SQL Server-Familie für immer funktioniert hat. Es würde alle meine Anwendungen, alle Anwendungen, die ich in meinem Geschäft kenne, durchbrechen und viele wichtige Daten beschädigen.

Lesen Sie die Wikipedia articlevollständig: möchten Sie den Code hinter Ihrer Banking-App dieses Isolationsmodell verwenden?

Im Allgemeinen daher Snapshot Isolation bringt einige das Problem der Aufrechterhaltung nicht-triviale Beschränkungen auf den Benutzer, der nicht entweder die möglichen Gefahren oder die möglichen Lösungen schätzen kann. Der Vorteil dieser Übertragung ist eine bessere Leistung.

Es ist ein Kompromiss wie die meisten Datenbank-Designs. In meinem Fall kann ich mit den Sperrwartezeiten/Deadlocks (selten) als Preis für einfachere und "out of the box" Datenintegrität umgehen. Ich muss noch auf ein Problem oder ein Problem stoßen, bei dem ich die Snapshot-Isolation als Lösung sehe.

+2

Können Sie erläutern, wie READ_COMMITTED_SNAPSHOT zu beschädigten Daten führen kann? –

18

auf Snapshot Turning standardmäßig würde die überwiegende Mehrheit der Anwendungen bricht

Es ist mir nicht klar, ob es die „große Mehrheit“ von Anwendungen zu brechen. Oder wenn es viele Anwendungen auf eine Weise durchbricht, die schwer zu identifizieren und/oder schwer zu umgehen ist. Die SQL Server-Dokumentation besagt, dass READ COMMITTED und READ COMMITTED SNAPSHOT beide die ANSI-Definition von READ COMMITTED erfüllen. (Angegeben hier: http://msdn.microsoft.com/en-us/library/ms189122.aspx) Also, solange Ihr Code nicht auf etwas jenseits des wörtlichen ANSI-verlangten Verhaltens angewiesen ist, werden Sie in der Theorie in Ordnung sein.

Eine Komplikation ist, dass die ANSI-Spezifikation nicht alles erfasst, was Leute normalerweise denken, dass Dinge wie schmutziges Lesen, unscharfes/nicht wiederholbares Lesen usw. in der Praxis bedeuten. Und es gibt Anomalien (zulässig durch die ANSI-Definitionen), die unter READ COMMITTED SNAPSHOT auftreten können, die unter READ COMMITTED nicht auftreten können. Ein Beispiel finden Sie unter http://www.jimmcleod.net/blog/index.php/2009/08/27/the-potential-dangers-of-the-read-committed-snapshot-isolation-level/.

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

Für tiefe Informationen über die Unterschiede zwischen den Isolationsstufen, starten Sie mit http://www.cs.umb.edu/cs734/CritiqueANSI_Iso.pdf (READ_COMMITTED_SNAPSHOT war nicht um, als dieses Papier geschrieben wurde, aber die anderen Ebenen sind davon abgedeckt).

+0

Tatsächlich, (vielleicht hat es sich geändert), ist die Antwort das: _Der Snapshot standardmäßig einzuschalten würde die große Mehrheit der Anwendungen ** brechen, die das alte, blockierende Verhalten ** _ erwarten. Nach meinem Verständnis gibt es bereits existierende Anwendungen, die auf dieser pessimistischen Sperrstrategie beruhen, von der erwartet wird, dass sie auf das Sperren von Sperren warten. –