Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

Wer blockiert wen … oder wird es vielleicht bald?

21. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

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 

Diesen Post teilen

Repost 0
Um über die neuesten Artikel informiert zu werden, abonnieren:

Kommentiere diesen Post