Frage

Ich habe eine eigenartige Situation. Ich habe auf Tische, auf die ständig von verschiedenen Teilen unseres Codes und Tausenden von Kunden zugegriffen werden. Daher haben wir die Verwendung von Transaktionen verwendet, wenn wir einfache Aktualisierungen und Einfügungen in unseren Tabellen durchführen. Das Problem ist, dass wir immer wieder Deadlockfehler bekommen. Hat jemand eine Idee, wie ich dieses Problem lindern kann?

War es hilfreich?

Lösung

Deadlocks können aus vielen Gründen und Kombinationen davon entstehen:

  • Schlechtes Schema -Design

  • Falsche Indizes für Ihre Abfrage -Arbeitsbelastung

  • Schlecht geschriebene TSQL

  • Aggressive Transaktions -Isolationsniveaus und/oder lang laufende offene Transaktionen

  • Schlechte Anwendungszugriffsmuster

  • Niedrige Spezifikation oder falsch konfigurierte Hardware

All dies sind häufig.

Ich schlage vor, Sie lesen

Andere Tipps

Dieses Problem ist nicht zu eigenartig - es ist typisch, wenn Entwickler nicht viel darüber wissen, wie das Sperren funktioniert, und nur Transaktionen als „schwarze Kisten“ betrachten und ihre Lösungen erwarten.

Mitch hat Recht in den Kommentaren, jemanden zu bezahlen, der ein Experte ist - dies ist ein Problem, das für jede Lösung zu groß ist. Sie müssen mit Spuren von Abfragen bewaffnet sein, die Deadlocks verursachen, und Sie müssen alles von Ihren Indizes bis zu Ihrem Tabellendesign bis hin zu Ihren Transaktions -Isolationsstufen bis hin zu Ihren Abfragemustern analysieren.

Ich schlage vor, mit dem SQL Server -Profiler zu beginnen und eine Trace einzurichten, die ein Deadlock -Diagramm erzeugt. Dies identifiziert zumindest Ihre Problemanfragen und die Ressourcen, die eine Frühlingsablockung sind. Richten Sie eine weitere Spur auf, um nach langsamen Abfragen (> sagen, 100 ms) und beschleunigen Sie diese auch. Je länger Ihre Anfragen laufen, desto höher ist die Wahrscheinlichkeit der Konkurrenz von Schloss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top