Wer blockiert wen … oder wird es vielleicht bald?
In den letzten Wochen ist es ein paar mal vorgekommen, das ein User einen längeren Prozess angestartet hatte, der Client bzw. die Citrix-Session brach ab, der Prozess auf dem SQL Server blieb bestehen und blockierte durch seine Sperren andere. Bis Helpdesk die Session rausgesucht und zwangsweise beendet hat, geht doch etwas Zeit ins Land. Da habe ich schneller den Prozess auf dem MSSQL beendet, so dass der Betrieb weiter gehen kann.
Nur auch der „Aktivitätsmonitor“ vom Management Studio ist etwas sehr träge und in so einem Fall muss man genauso erst suchen, bis man den Verursacher gefunden hat.
Ein kleines T-SQL Script dazu ist effizienter und das Ergebnis lässt sich fix per <F5> aktualisieren. Es listet alle blockierten Prozess und alle mit einer offenen Transaktion auf; man bekommt also immer den Verursacher mit seinen "Opfern" zu sehen.
-- Welcher Process blockiert welchen Process und das ggf. rekursive -- Ebenso werden alle Processe mit offenen Transaction angezeigt, -- die somit zur Blockade werden könnte. SELECT PRO.spid, PRO.blocked,
PRO.waitresource, PRO.waittime,
PRO.last_batch, PRO.status,
PRO.open_tran, PRO.hostname, PRO.program_name, PRO.loginame,
DBS.name as DatabaseName FROM sys.sysprocesses AS PRO
INNER JOIN sys.sysdatabases AS DBS ON PRO.dbid = DBS.dbid WHERE PRO.blocked <> 0
OR PRO.open_tran > 0 ORDER BY PRO.blocked ASC, PRO.spid ASC