Sind Deadlocks ein ernstes Problem? [geschlossen]

7

Ich habe einige SQL Server-Produktionsinstanzen und erhalte täglich etwa 100 Deadlock-Alarm-E-Mails (bis zu 100 für einen Server, insgesamt 150).

Ist das ein Problem, das ich untersuchen sollte? Wie viele Deadlocks sind problematisch und was kann die mögliche Folge sein, wenn dieses Problem ignoriert wird?

BuahahaXD
quelle
2
Ich würde mir Sorgen machen, wenn es einen Deadlock pro Tag gäbe - es ist ein Problem / Fehler im Anwendungsdesign
Philᵀᴹ
hoffentlich füttern Sie keine Philosophen .
Vikingosegundo
Die App-Entwickler sollten dies bereits wissen. Sicherlich haben sie Fehlerberichte in ihrer App.
usr
Die Frage wurde auf Eis gelegt. Ich verstehe, dass es auf Meinungen beruhen könnte, aber tatsächlich suche ich einige Ratschläge von erfahrenen und bewussten DBA. Ich würde gerne wissen, wie schwerwiegend dieses Problem sein kann. Ich frage nicht, was die Fehlernummer X bedeutet oder warum es passiert ist. Ich frage nach seiner Schwere - eine Angelegenheit, die nicht allein aufgrund von Fakten oder Theorien beantwortet werden kann.
BuahahaXD

Antworten:

17

Es ist normalerweise nicht die Anzahl der Deadlocks, die ein ernstes Problem verursachen können, aber der Grund für die Untersuchung wäre, herauszufinden, welche Workloads sich gegenseitig blockieren. Immerhin gibt es in einer Sackgasse ein Opfer . Jetzt haben Sie also einen Prozess, der die beabsichtigte Arbeit nicht abgeschlossen hat . Und in der guten Theorie sollten Anwendungen für Situationen wie diese eine Art Wiederholungslogik enthalten ... aber in der Praxis passiert dies fast nie.

Untersuchen Sie, was festgefahren ist. In der Regel ist es dieselbe Arbeitslast oder Art von Arbeitslast, die die meisten Deadlocks generiert. Ein paar schnelle Korrekturen (nach dem Lesen des Deadlock-XML) könnten ein einfacher Gewinn sein, um die meisten von ihnen loszuwerden.

(Ja, mehr als 100 Deadlocks pro Tag sind eine Menge. Aber jedes wiederkehrende Deadlocking-Muster, ob 1 oder 100, sollte untersucht werden.)

Thomas Stringer
quelle
3

Deadlock ist aus Sicht der Leistung eine ziemlich schwere Operation, da es einige Zeit dauert, um herauszufinden, dass es einen Deadlock gibt. Wählen Sie die zu tötende aus, setzen Sie alle vorgenommenen Änderungen zurück - und versuchen Sie dann höchstwahrscheinlich, die Operation auszuführen nochmal. Auch die Endbenutzer können frustriert sein, insbesondere wenn sie Fehlermeldungen erhalten, die sie nicht verstehen oder bestimmte Aktionen erneut ausführen müssen, aber dies hängt natürlich davon ab, mit was Sie arbeiten.

Zumindest würde ich mir persönlich Sorgen machen, wenn es über 100 Deadlocks pro Tag gibt, und versuchen, das Problem zu lösen, bevor es schlimmer wird, aber wie alles hängt es natürlich davon ab.

James Z.
quelle
1

Was kostet es Ihre Stakeholder? Was kostet das "Reparieren"?

Deadlocks werden passieren. Wir entwerfen so viel wie möglich, um sie zu beseitigen. Eine Zeitüberschreitung ist nicht ganz dasselbe, da wir möglicherweise einige Wartungsarbeiten durchführen müssen, die eine erweiterte Sperre beinhalten.

Die Auswirkungen hängen von der Art der Transaktion ab. Stapelprozesse und asynchrone Prozesse sollten tolerant sein und keine oder nur geringe Auswirkungen haben (kontinuierliche Deadlocks erfordern möglicherweise die Serialisierung von Transaktionen oder eine Neugestaltung). Online-Transaktionen sind im Allgemeinen nicht so tolerant.

Der Aufwand für das Zurücksetzen eines Online-Deadlocks ist im Allgemeinen tolerierbar im Vergleich zum Zurücksetzen eines Batch-Prozesses mit begrenzten Festschreibungspunkten.

Die wirkliche Auswirkung ist, was mit den fehlgeschlagenen Transaktionen geschehen muss. Ist Ihre Anwendung in der Lage, diese zu tolerieren, oder ist ein manueller Prozess erforderlich? Denken Sie in Dollar.

Ich würde vorschlagen, dass Sie eine E-Mail mit einer täglichen Zusammenfassung erhalten. Dies ermöglicht ein klareres Bild. 100 ist eine Sorge. Schauen Sie sich dann die Transaktionen an. Die Tabellen sollten in derselben Reihenfolge von "außen" bis "innen" getroffen werden (wobei die übergeordneten Tabellen "innen" sind). Es gibt eine Reihe von Strategien, die Ihnen in den Sinn kommen, ohne Ihre Transaktionen zu sehen. Vermeiden Sie Hotspots, Standardwerte in einem Index können gehasht werden usw. Machen Sie Ihren Benutzern Vorschläge.

Aber im Ernst, eine E-Mail, und bringen Sie Ihre Grafiken auf. Wenn dies ein Hardwareproblem ist, versuchen Sie es am besten so früh wie möglich.

mckenzm
quelle
0

Ja, Deadlock ist ein ernstes Problem und sollte entsprechend behandelt werden, da Deadlocks manchmal als tödliche Umarmung bezeichnet werden.

Deadlocks können die Leistung einer Anwendung beeinträchtigen. Benutzer werden sich darüber beschweren, dass die App langsam oder defekt ist. Entwickler werden den DBA bitten, das Problem zu beheben. DBAs werden das Problem auf Entwickler zurückschieben.

Count kann Ihnen die Auswirkungen nicht sagen, Deadlock selbst ist tödlich!

Verwenden Sie den SQL Profiler-Trace, um die Ursache zu finden und weitere Informationen zum Minimieren und Beheben dieses Problems zu erhalten. Weitere Informationen finden Sie unter folgendem Link:

https://www.simple-talk.com/sql/database-administration/handling-deadlocks-in-sql-server/

KASQLDBA
quelle