通常我们可以使用

sp_who2

我们希望更加简洁的信息,下面这个查询使用系统表sys.sysprocesses,以及sys.dm_exec_sql_text做OUTER APPLY. T-SQL是这样的:

SELECT   
spid,         
blocked,         
DB_NAME(sp.dbid) AS DBName,         
program_name,         
waitresource,         
lastwaittype,         
sp.loginame,         
sp.hostname,         
a.[Text] AS [TextData],         
SUBSTRING(A.text, sp.stmt_start / 2, 
         (CASE WHEN sp.stmt_end = -1 THEN DATALENGTH(A.text) ELSE sp.stmt_end 
         END - sp.stmt_start) / 2) AS [current_cmd]
         FROM     sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A
         WHERE    spid > 50
         ORDER BY blocked DESC, DB_NAME(sp.dbid) ASC, a.[text];

您可能注意到过滤了spid小于50的,这里有TextData,Current_cmd两列,可以列出当前DataBase执的SQL文本,当然您拿到spid就可以使用更多的查询。 
      以便于您定位阻塞的进程。

      希望对您有帮助。

      

转自:

http://www.cnblogs.com/wintersun/archive/2012/02/12/2348059.html