Ich habe viele Deadlocks in meinem System.
Ich möchte Snapshot Isolation verwenden, um sie zu beheben, aber mein DBA verfügt über Reserven.
Eines seiner Probleme ist, dass Snapshot Isolation das Schreiben verlangsamt. Dies liegt daran, dass es in den Cache und dann in die TempDb (Zeilenversion) schreiben muss und dann zum Aufrufer zurückkehren kann.
Ein "normaler" Schreibvorgang kann einfach in den Cache schreiben und dann ausgeführt werden.
Funktioniert die Zeilenversionierung so? Oder ist es komplexer als das? Tut es das irgendwie parallel?
Oder sind Schreibvorgänge mit Snapshot Isolation langsamer?
Antworten:
Nein, das ist falsch. Dies impliziert irgendwie, dass Schreibvorgänge bei vorhandener Versionierung eine höhere Latenz haben, da jeder Schreibvorgang die Festplatte berühren muss (für Tempdb), was nicht der Fall ist. Das Schreiben in die Tempdb ist auch ein Schreiben in den 'Cache'. Das einzige 'Warten' tritt zur COMMIT-Zeit auf, wenn das Protokoll gehärtet werden muss. Es stimmt, dass bei der Versionierung sowohl das DB-Protokoll als auch das Tempdb-Protokoll gehärtet werden müssen, dies bedeutet jedoch nicht unbedingt eine höhere Latenz (die E / A sollte auf verschiedenen Speicherpfaden parallel sein, die Tempdb wird auf einem separaten Laufwerk von Ihrem häufig verwendeten LDF gespeichert. Recht?). Eine ausführliche Erklärung finden Sie unter Funktionsweise: Bob Dorrs SQL Server-E / A-Präsentation Ich hoffe wirklich, dass Ihr DBA dies besser versteht, als Sie es hier vermitteln.
Wie ich in Ihrem anderen Beitrag erwähnt habe: Snapshot hat keine Kosten für INSERTS und die Kosten für Updates und Löschungen können leicht gesenkt werden. Die Ressourcennutzung bei der Zeilenversionierung erläutert die Kompromisse. Zu diesem Zeitpunkt sollten Sie wahrscheinlich mit einer realistischen Arbeitsbelastung testen, was der einzige Weg ist , um richtig die Auswirkungen beurteilen Sie würden erleben.
quelle
sys.dm_db_file_space_usage
auf Ihrem Produktionsserver nachsehen. Wennversion_store_reserved_page_count
ungleich Null ist, verwenden Sie bereits den Versionsspeicher .Ich glaube, es gibt andere Probleme in der Anwendung, wenn Sie Deadlocks bekommen. Die Snapshot-Isolation hilft normalerweise dabei, Wartesperren zu reduzieren, aber die Wurzel von Deadlocks sind normalerweise verschiedene Zugriffsmethoden in der Anwendung, die verhindert werden sollten, indem ein konsistentes Muster eingehalten wird. Diskussionen über Deadlocks sind kompliziert und es gibt viele Ressourcen, die ihnen gewidmet sind.
Ihr DBA hat zu Recht Bedenken, die Isolationsstufe in Snapshot zu ändern, da dies die Belastung der TempDB erhöht. Ich empfehle generell, die Snapshot-Isolation zu verwenden, aber ich denke, das ist nur ein Teil der Behebung Ihrer Deadlocks. Es kann zu schmutzigen Schreibvorgängen kommen, bei denen eine Transaktion Zeile A und dann B und eine andere Transaktion Zeile B und dann A aktualisiert.
quelle