2009-05-30 9 views
5

Ich habe dieses Dead-Lock-Problem gelesen Wenn Datenbanktabellen Tausende von Zeilen akkumulieren und viele Benutzer gleichzeitig an derselben Tabelle arbeiten, erzeugen SELECT-Abfragen in den Tabellen Sperrkonflikte und Transaktions-Deadlocks.Wie Deadlock Problem zu lösen?

Ist dieses Deadlock-Problem mit TransactNo-Update verknüpft? Wenn Sie dieses Problem kennen, lassen Sie es mich bitte wissen. Vielen Dank im Voraus.

Antwort

3

Sie haben nicht genügend Informationen zur Verfügung gestellt, um Ihre Frage direkt zu beantworten.

Die meisten Sperren und Blockierungen können jedoch reduziert (oder sogar eliminiert) werden, indem Sie die richtigen Indizes für die Abfrageauslastung angeben.

Sie haben einen regelmäßigen Indexwartungsjob geplant?

Wenn Sie SELECT s haben, brauchen nicht 100% genau zu sein (das heißt erlauben Dirty Reads etc.), dann können Sie einige SELECTS mit WITH(NOLOCK) laufen, die die gleiche wie eine Isolationsstufe READ UNCOMMITED ist. Bitte beachten Sie: Ich schlage nicht vor, Sie platzieren WITH(NOLOCK) überall; nur auf diejenigen SELECTS, die nicht 100% intakte Daten benötigen.

4

Ein Deadlock kann aus vielen, vielen Gründen passieren, so dass Sie zuerst ein bisschen Hausaufgaben machen müssen, wenn Sie uns helfen wollen und uns sagen, was den Deadlock verursacht, d. Was sind die Stapel, die das Deadlock ausführen, welche Ressourcen involviert sind und so weiter und so fort? Die Profiler deadlock event graph ist immer ein großartiger Ort, um die Untersuchung zu beginnen.

Wenn ich eine Aufnahme im Dunkeln wagen würde, was passiert, ist, dass Ihre Abfragen und Indizes nicht richtig abgestimmt sind, so dass die meisten Ihrer Leseoperationen (und vielleicht einige der Schreibvorgänge) vollständige Tabellenscans sind und somit kollidieren mit Updates. Dies kann dazu führen, deadlocks by order of index access, Deadlock nach Reihenfolge der Operationen, Deadlock durch Eskalation und so weiter und so weiter.

Sobald Sie die Ursache des Deadlocks identifiziert haben, kann die entsprechende Aktion zum Entfernen des Deadlocks ausgeführt werden. Die Fälle, in denen er richtiges Handeln auf schmutzige Reads setzt, sind extrem selten.

BTW Ich bin mir nicht sicher, was Sie mit 'TransactNo updlock' meinen. Fragen Sie speziell nach der S-U/U-S asymmetry of the U locks?

4

Ein gemeinsames Problem mit hohen Isolation ist Verriegelungseskalations Deadlocks aufgrund der das folgende Szenario; d.h.(Wobei X eine beliebige Ressource, wie beispielsweise eine Zeile)

  • SPID A liest X - wird eine Lesesperre
  • SPID b liest X - erhält eine Lesesperre
  • SPID A versucht X zu aktualisieren - blockierten durch b das Schloss zu lesen, hat so
  • SPID b versucht warten X zu aktualisieren - durch eine Lesesperre ist blockiert, so hat

Deadlock warten! Dieses Szenario kann, indem mehr Sperren vermieden werden:

  • SPID ein liest X mit (UPDLOCK) angegeben - bekommt eine exklusive Sperre
  • SPID b versucht, liest X - blockiert durch eine ist exklusive Sperre, muss also warten
  • SPID einen Versuch X zu aktualisieren - fine
  • ... (SPID eine Commits/Rollen-zurück und hebt die Sperre an einem gewissen Punkt)
  • ... (SPID b tut, was er tun wollte)
+0

Sperren Eskalation ist, wenn der Motor entscheidet, aufzugeben, einzelne granulare Sperren zu nehmen und entscheidet, eine höhere Ebene grobe Sperre zu erhalten. Die Sperreneskalation geht von Sperren auf Zeilenebene zu Sperren auf Tabellenebene. Ein Tale-Zeichen eines Lock-Eskalations-Deadlocks ist die Beteiligung von I-Locks (Intentions-Locks), da Eskalation versucht, echte Sperren auf dem Tisch zu erhalten, und es wird mit den verschiedenen bereits darauf platzierten Absichts-Locks (S-IX, S-IS) in Konflikt geraten . Ihr Beispiel ist das kanonische Lesen, gefolgt vom Schreibvorgang, es bezieht sich nicht auf Eskalation. –

+0

Wenn ich die falsche Terminologie verwende, dann entschuldige ich mich; aber das Szenario (mit welchem ​​Namen auch immer) ist ein häufiges Problem. –

3

Ich werde meinen eigenen Artikel und Beiträge in die Mischung über Deadlocks werfen:

http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Deadlock/default.aspx

ich auch eine Reihe von Videos zur Fehlerbehebung habe JumpstartTv.com Deadlocks auf auch:

http://jumpstarttv.com/profiles/1379/Jonathan-Kehayias.aspx

Deadlocks können schwierig zu lösen sein, aber wenn Sie nicht Ihre Deadlock-Grapheninformationen veröffentlichen, können wir sowieso nicht mehr als Links zu Posts und Informationen zum Problemlösen anbieten Schlösser.

8

Deadlocks können aus vielen Gründen auftreten, und manchmal kann die Fehlerbehebung bei Deadlocks eher eine Kunst als eine Wissenschaft sein.

Was ich verwende, um Deadlocks außerhalb von SQL Profiler zu finden und loszuwerden, ist ein leichtgewichtiges Tool, das eine grafische Darstellung von Deadlocks gibt, sobald sie auftreten. Wenn Sie einen Deadlock sehen, können Sie einen Drilldown durchführen und wertvolle Informationen erhalten. Deadlock Detector - http://www.sqlsolutions.com/products/sql-deadlock-detector

Es ist ein einfaches Werkzeug, aber für mich macht es genau das, was es tun soll. Eine Sache: Bei der ersten Verwendung musste ich 15 Minuten warten, bis das Tool genügend Messwerte gesammelt hatte, um Deadlocks zu zeigen.

Verwandte Themen