2010-12-16 5 views
8

Gibt es eine Möglichkeit, die gesperrten Tabellen aufzulisten und die Transaktionen zu beenden, wenn sie sofort entsperrt werden sollen.So finden Sie die gesperrten Tabellennamen (spezifisch für jede Transaktion)

Oder gibt es irgendeine andere Terminologie, die wir für die obige Operation befolgen müssen, nach der ich suche.

Jede Hilfe oder Anleitung wird geschätzt.

+1

Es ist wirklich nicht nötig, Ihr Thema als erste Zeile Ihrer Frage zu stellen - wir alle lesen es. Außerdem brauchen Sie keine Kappen, es macht es nur schwer zu lesen. – Robert

Antwort

13

Dadurch werden alle Datenbanken mit exklusiven Sperren zeigen gehalten werden (die zu der Zeit gehalten transiente diejenigen einschließen kann dies ausgeführt wird), die sys.dm_tran_locks DMV mit:

select d.*, l.* from sys.dm_tran_locks l 
join sys.databases d on l.resource_database_id = d.database_id 
where l.request_mode = 'X' 

(X = exklusiv, S = Geteilt, IS = Absicht geteilt) Siehe Lock Modes.

Aber wahrscheinlich der beste Weg ist, auf Trace Flags 1204 und 1222 drehen:

Trace Flag 1204 und Trace Flag 1222 Wenn Deadlocks auftreten, Trace-Flag 1204 und Spuren Flagge 1222 Rückkehr Informationen , die ist erfasst im SQL Server 2005 Fehlerprotokoll. Das Ablaufverfolgungsflag 1204 meldet Deadlock-Informationen, die von jedem am Deadlock beteiligten Knoten mit formatiert wurden. Trace Flag 1222 Formate Deadlock Informationen, zuerst von Prozessen und dann von Ressourcen. Es ist möglich, beide Ablaufverfolgungsflags zu aktivieren, um zwei Darstellungen des gleichen Deadlock Ereignisses zu erhalten.

Ref: Detecting and Ending Deadlocks

, auch laufen sp_who2 und sucht nach Einträgen in der BlkBy (Blocked By) Spalte; Folge diesen bis du an den Kopf der Deadlock-Kette kommst. Das ist die Prozesskennung (oder PID), die verantwortlich ist.

zu bekommen, was SQL hinter einem bestimmten Prozess ausgeführt werden können Sie laufen:

dbcc inputbuffer (@pid) 

und verwenden, die PID um den Prozess zu töten (mit Vorsicht und auf eigenes Risiko):

kill @pid 

Check out Who is Active? v10.00: DMV Monitoring Made Easy

lesen Sie auch Blocking is not Deadlocking (um die beiden Szenarien zu unterscheiden)

+0

Was genau die BlkBy-Spalte impliziert, ist das, was mit der Transaktion zusammenhängt, aufgrund der die Tabelle gesperrt wurde. Und wie man den Prozess mit PID killt. Ich bin in der Lage SPID Spaltenname, wenn ich "sp_who2" ausführen –

+0

Was bedeutet die Werte von sys.dm_tran_locks.request_mode für S, IS und X wie in Ihrer obigen Abfrage. Kannst du das bitte beschreiben? –

+0

@K Maheshwar Rao: Ist das hilfreich, wie wäre es mit einer Upvote-Liebe? –

Verwandte Themen