查看指定spid的脚本当前运行情况和状态

  1. USE Master  
  2. GO  
  3.   
  4. declare  
  5.     @spid int  
  6. ;  
  7.   
  8. select   
  9.     @spid = 419--null:all   
  10. ;  
  11.    
  12. ;WITH DATA(spid,blockRelationship,blocked,spidLevel,hostname,program_name,loginame,login_time,BlockDuration,Status,sqlText,Memo,stmt_start,stmt_end,db_Name)  
  13. AS(  
  14.     SELECT spid  
  15.            ,CONVERT(VARCHAR(256),' ') AS blockRelationship  
  16.            ,blocked  
  17.            ,spidLevel = 1  
  18.            ,hostname  
  19.            ,program_name  
  20.            ,loginame  
  21.            ,A.login_time  
  22.            ,DATEDIFF(MINUTE,A.login_time,GETDATE()) AS BlockDuration  
  23.            ,A.Status  
  24.            ,B.text  
  25.            ,Memo = CONVERT (varchar(128), 'BlockRoot')  
  26.            ,A.stmt_start  
  27.            ,A.stmt_end  
  28.            ,db_name(A.dbid) AS db_Name  
  29.     FROM sys.sysprocesses AS A WITH (NOLOCK)   
  30.        CROSS APPLY sys.dm_exec_sql_text(A.sql_handle) AS B  
  31.     WHERE Blocked = 0  
  32.     UNION ALL  
  33.     SELECT   
  34.            A.spid  
  35.            ,CONVERT(varchar(128),REPLICATE('L' ,B.spidLevel)) + CONVERT (varchar(128), A.blocked) AS Sort  
  36.            ,A.blocked  
  37.            ,spidLevel+1  
  38.            ,A.hostname  
  39.            ,A.program_name  
  40.            ,A.loginame  
  41.            ,A.login_time  
  42.            ,DATEDIFF(MINUTE,A.login_time,GETDATE()) AS BlockDuration  
  43.            ,A.Status  
  44.            ,C.text  
  45.            ,Memo = 'Blocked by ' + CONVERT (varchar(117), A.blocked)  
  46.            ,A.stmt_start  
  47.            ,A.stmt_end  
  48.            ,db_name(A.dbid) AS db_Name  
  49.     FROM sys.sysprocesses AS A WITH (NOLOCK)  
  50.        INNER JOIN  DATA AS B  
  51.         ON A.blocked = B.spid  
  52.        CROSS APPLY sys.dm_exec_sql_text(A.sql_handle) AS C  
  53.     --WHERE B.blocked = 0  
  54. )  
  55. SELECT spid  
  56.        ,blockRelationship  
  57.        ,blocked  
  58.        ,login_time  
  59.        ,GETDATE() AS [current_time]  
  60.         ,sql_statement = (SELECT TOP 1 SUBSTRING(sqlText,stmt_start / 2+1 ,   
  61.                          (   
  62.                             (  
  63.                             CASE WHEN stmt_end = -1 THEN (LEN(CONVERT(nvarchar(max),sqlText)) * 2)   
  64.                                    ELSE stmt_end END  
  65.                             )  - stmt_start) / 2+1  
  66.                          )  
  67.                       )  
  68.        ,db_Name  
  69.        ,spidLevel  
  70.        ,hostname  
  71.        ,loginame  
  72.        ,program_name  
  73.        --,login_time  
  74.        ,BlockDuration  
  75.        ,status  
  76.        ,sqlText  
  77.        ,Memo  
  78. FROM DATA  
  79. --the block root spid  
  80. WHERE spidLevel = 1  
  81.     AND spID IN(  
  82.                   SELECT blocked  
  83.                   FROM DATA  
  84.               )  
  85. UNION ALL  
  86. SELECT spid  
  87.        ,blockRelationship  
  88.        ,blocked  
  89.        ,login_time  
  90.        ,GETDATE()  
  91.         ,sql_statement = (SELECT TOP 1 SUBSTRING(sqlText,stmt_start / 2+1 ,   
  92.                          (   
  93.                             (  
  94.                             CASE WHEN stmt_end = -1 THEN (LEN(CONVERT(nvarchar(max),sqlText)) * 2)   
  95.                                    ELSE stmt_end END  
  96.                             )  - stmt_start) / 2+1  
  97.                          )  
  98.                       )  
  99.        ,db_Name  
  100.        ,spidLevel  
  101.        ,hostname  
  102.        ,loginame  
  103.        ,program_name  
  104.        --,login_time  
  105.        ,BlockDuration  
  106.        ,status  
  107.        ,sqlText  
  108.        ,Memo  
  109. FROM DATA  
  110. WHERE spidLevel > 1  
  111.   
  112. --kill 68  
  113.   
  114. IF @spid is not null  
  115.   
  116.     SELECT   
  117.         database_name = DB_NAME(s1.dbid)  
  118.         ,sql_statement = (SELECT TOP 1 SUBSTRING(s2.text,stmt_start / 2+1 ,   
  119.                              (   
  120.                                 (  
  121.                                 CASE WHEN stmt_end = -1 THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)   
  122.                                        ELSE stmt_end END  
  123.                                 )  - stmt_start) / 2+1  
  124.                              )  
  125.                           )  
  126.         ,s2.text  
  127.         ,Duration_min = DATEDIFF(MINUTE,s1.login_time,GETDATE())  
  128.         ,s1.hostname  
  129.         ,s1.status  
  130.         ,s1.cpu  
  131.     FROM sys.sysprocesses AS s1 WITH(NOLOCK)  
  132.         CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2   
  133.     WHERE s1.spid = @spid;  
  134.   
  135. --kill 87  
posted @ 2018-03-20 10:12  Net-Spider  阅读(206)  评论(0)    收藏  举报