Der Ausführungsplan für Abfragen zeigt standardmäßig keine Sperrdetails an. Ist es möglich, die Sperren zusammen mit dem Typ anzuzeigen, der während der Ausführung einer Abfrage erfasst wurde?
quelle
Der Ausführungsplan für Abfragen zeigt standardmäßig keine Sperrdetails an. Ist es möglich, die Sperren zusammen mit dem Typ anzuzeigen, der während der Ausführung einer Abfrage erfasst wurde?
Ist es möglich, die Sperren zusammen mit dem Typ anzuzeigen, der während der Ausführung einer Abfrage erworben wurde?
Ja, um Sperren zu bestimmen,
Sie können beta_lockinfovon Erland Sommarskog verwenden
beta_lockinfo
ist eine gespeicherte Prozedur, die Informationen zu Prozessen und deren Sperren sowie zu den aktiven Transaktionen bereitstellt.beta_lockinfo
wurde entwickelt, um so viele Informationen wie möglich über eine Blockierungssituation zu sammeln, damit Sie den Täter sofort finden und den Blockierungsprozess beenden können, wenn die Situation verzweifelt ist. Anschließend können Sie sich zurücklehnen und die Ausgabe von analysieren, umbeta_lockinfo
zu verstehen, wie die Blockierungssituation entstanden ist, und herauszufinden, welche Maßnahmen ergriffen werden müssen, um ein erneutes Auftreten der Situation zu verhindern. Die Ausgabe vonbeta_lockinfo
zeigt alle aktiven und passiven Prozesse mit Sperren an, welche Objekte sie sperren, welchen Befehl sie zuletzt übergeben haben und welche Anweisung sie ausführen. Sie erhalten auch die Abfragepläne für die aktuellen Anweisungen. Normalerweise rennst dubeta_lockinfo
, um die Ausgabe direkt anzuzeigen. Es gibt jedoch auch einen Archivierungsmodus, in dem die Daten in einer Tabelle gespeichert werden. Dies ist nicht zuletzt nützlich, wenn Sie möchten, dass Ihnen jemand die Ausgabe vonbeta_lockinfo
einer Site sendet, auf die Sie keinen Zugriff haben.
Eine andere Methode ist die sp_whoIsActivevon Adam Machanic mit@get_locks = 1
EXEC sp_WhoIsActive
@filter = '',
@filter_type = 'session',
@not_filter = '',
@not_filter_type = 'session',
@show_own_spid = 0,
@show_system_spids = 0,
@show_sleeping_spids = 1,
@get_full_inner_text = 0,
@get_plans = 1,
@get_outer_command = 1,
@get_transaction_info = 0,
@get_task_info = 1,
@get_locks = 1, ----------> 1 = ON (get lock info); 0 = OFF
@get_avg_time = 0,
@get_additional_info = 0,
@find_block_leaders = 0,
@delta_interval = 0,
@output_column_list = '[dd%][session_id][sql_text][sql_command][login_name][wait_info][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][query_plan][locks][%]',
@sort_order = '[start_time] ASC',
@format_output = 1,
@destination_table = '',
@return_schema = 0,
@schema = NULL,
@help = 0
So betrachte ich Sperren nach Prozess / Tabelle / Sperrentyp:
quelle
Sie können den Verlauf der erfassten Sperren auf der Registerkarte "Nachrichten" anzeigen, nachdem Sie Folgendes ausgeführt haben: DBCC TRACEON (1200, 3604, -1) Aber ACHTUNG, Sie aktivieren diese Ablaufverfolgungsflags GLOBAL. Vergessen Sie nicht, sie zu deaktivieren, sobald Sie dies nicht tun brauche sie.
quelle
Sie können die Sperren für eine Sitzung mit sp_lock oder sys.dm_tran_locks anzeigen. In beiden Fällen können Sie nach Sitzung filtern. Sie können dazu auch Extended Events verwenden.
quelle
Ja, Sie können die Sperren und ihren Typ während der Ausführung der Abfrage über anzeigen
Adam Mechanics SP_whoisactive Klicken Sie hier, um anzuzeigen
Außerdem können Sie mit Hilfe von trace einen Blockbericht erstellen, wie hier erläutert
quelle
performance counters
Gibt Ihnen nur ein instanzweites Verhalten. Das OP will auf Abfrageebene.