1+ -- Identify the Lead Blocker (RealTime)
12IF OBJECT_ID(' tempdb..#SysProcesses' ) IS NOT NULL
23 DROP TABLE # SysProcesses;
34select Concat
@@ -15,12 +16,29 @@ select Concat
1516 ,SUBSTRING (t .text , (r .stmt_start / 2 )+ 1 ,
1617 ((CASE r .stmt_end WHEN - 1 THEN DATALENGTH(t .text )
1718 ELSE r .stmt_end END - r .stmt_start )/ 2 ) + 1 ) AS sql_text
18- -- ,r.cmd
19+ ,r .cmd as command
1920 ,r .loginame as login_name
2021 ,db_name(r .dbid ) as database_name
21- ,r .program_name
22+ ,[program_name] = CASE WHEN r .program_name like ' SQLAgent - TSQL JobStep %'
23+ THEN ( select top 1 ' SQL Job = ' + j .name
24+ from msdb .dbo .sysjobs (nolock) as j
25+ inner join msdb .dbo .sysjobsteps (nolock) AS js on j .job_id = js .job_id
26+ where right(cast(js .job_id as nvarchar(50 )),10 ) = RIGHT(substring (r .program_name ,30 ,34 ),10 )
27+ ) + ' ( ' + SUBSTRING (LTRIM(RTRIM(r .program_name )), CHARINDEX(' : Step ' ,LTRIM(RTRIM(r .program_name )))+ 2 ,LEN(LTRIM(RTRIM(r .program_name )))- CHARINDEX(' : Step ' ,LTRIM(RTRIM(r .program_name )))- 2 )+ ' )'
28+ ELSE r .program_name
29+ END
2230 ,(case when r .waittime = 0 then null else r .lastwaittype end) as wait_type
2331 ,r .waittime as wait_time
32+ ,(SELECT CASE
33+ WHEN pageid = 1 OR pageid % 8088 = 0 THEN ' PFS'
34+ WHEN pageid = 2 OR pageid % 511232 = 0 THEN ' GAM'
35+ WHEN pageid = 3 OR (pageid - 1 ) % 511232 = 0 THEN ' SGAM'
36+ WHEN pageid IS NULL THEN NULL
37+ ELSE ' Not PFS/GAM/SGAM' END
38+ FROM (SELECT CASE WHEN er.[wait_type] LIKE ' PAGE%LATCH%' AND er.[wait_resource] LIKE ' %:%'
39+ THEN CAST(RIGHT(er.[wait_resource], LEN(er.[wait_resource]) - CHARINDEX(' :' , er.[wait_resource], LEN(er.[wait_resource])- CHARINDEX(' :' , REVERSE(er.[wait_resource])))) AS INT )
40+ ELSE NULL END AS pageid) AS latch_pageid
41+ ) AS wait_resource_type
2442 ,null as tempdb_allocations
2543 ,null as tempdb_current
2644 ,r .blocked as blocking_session_id
@@ -47,7 +65,7 @@ CROSS APPLY sys.dm_exec_sql_text(r.SQL_HANDLE) as t;
4765 -- Find block Leaders
4866 SELECT [dd hh:mm:ss], [collection_time], [session_id],
4967 [sql_text] = REPLACE(REPLACE(REPLACE(REPLACE(CAST(COALESCE([sql_command],[sql_text]) AS VARCHAR (MAX)),char (13 ),' ' ),CHAR (10 ),' ' ),' <?query --' ,' ' ),' --?>' ,' ' ),
50- [login_name], wait_type, r .wait_time , [blocking_session_id], null as [blocked_session_count],
68+ command, [login_name], wait_type, r .wait_time , wait_resource_type , [blocking_session_id], null as [blocked_session_count],
5169 [status], open_tran, [host_name], [database_name], [program_name],
5270 r .cpu , r.[tempdb_allocations], r.[tempdb_current], r.[reads], r.[writes], r.[physical_io],
5371 [LEVEL] = CAST (REPLICATE (' 0' , 4 - LEN (CAST (r .session_id AS VARCHAR ))) + CAST (r .session_id AS VARCHAR ) AS VARCHAR (1000 ))
@@ -59,7 +77,7 @@ CROSS APPLY sys.dm_exec_sql_text(r.SQL_HANDLE) as t;
5977 --
6078 SELECT r.[dd hh:mm:ss], r.[collection_time], r.[session_id],
6179 [sql_text] = REPLACE(REPLACE(REPLACE(REPLACE(CAST(COALESCE(r.[sql_command],r.[sql_text]) AS VARCHAR (MAX)),char (13 ),' ' ),CHAR (10 ),' ' ),' <?query --' ,' ' ),' --?>' ,' ' ),
62- r.[login_name], r .wait_type , r .wait_time , r.[blocking_session_id], null as [blocked_session_count],
80+ r .command , r. [login_name], r .wait_type , r .wait_time , r . wait_resource_type , r.[blocking_session_id], null as [blocked_session_count],
6381 r.[status], r .open_tran , r.[host_name], r.[database_name], r.[program_name],
6482 r .cpu , r.[tempdb_allocations], r.[tempdb_current], r.[reads], r.[writes], r.[physical_io],
6583 CAST (B .LEVEL + RIGHT (CAST ((1000 + r .session_id ) AS VARCHAR (100 )), 4 ) AS VARCHAR (1000 )) AS LEVEL
@@ -70,25 +88,25 @@ CROSS APPLY sys.dm_exec_sql_text(r.SQL_HANDLE) as t;
7088 AND r .blocking_session_id = B .session_id
7189 WHERE r .blocking_session_id <> r .session_id
7290)
73- -- select * from T_BLOCKERS
74-
7591SELECT [dd hh:mm:ss],
7692 [BLOCKING_TREE] = N' ' + REPLICATE (N' | ' , LEN (LEVEL)/ 4 - 1 )
7793 + CASE WHEN (LEN(LEVEL)/ 4 - 1 ) = 0
7894 THEN ' HEAD - '
7995 ELSE ' |------ '
8096 END
8197 + CAST (r .session_id AS NVARCHAR (10 )) + N' ' + (CASE WHEN LEFT(r.[sql_text],1 ) = ' (' THEN SUBSTRING (r.[sql_text],CHARINDEX(' exec' ,r.[sql_text]),LEN(r.[sql_text])) ELSE r.[sql_text] END),
82- [session_id], [blocking_session_id],
98+ -- [session_id], [blocking_session_id],
8399 -- w.lock_text,
84100 [sql_commad] = CONVERT (XML, ' <?query -- ' + char (13 )
85101 + (CASE WHEN LEFT([sql_text],1 ) = ' (' THEN SUBSTRING ([sql_text],CHARINDEX(' exec' ,[sql_text]),LEN([sql_text])) ELSE [sql_text] END)
86102 + char (13 )+ ' --?>' )
87- ,[login_name], [program_name], [database_name], wait_type, wait_time, status, [blocked_session_count], r .open_tran
103+ ,command, [login_name], [program_name], [database_name], wait_type, wait_time, wait_resource_type , status, [blocked_session_count], r .open_tran
88104 ,r .cpu , r.[reads], r.[writes], r.[physical_io]
89105 ,[host_name]
90106FROM T_BLOCKERS AS r
91107ORDER BY LEVEL ASC ;
92108
93- exec sp_WhoIsActive;
94- -- EXEC sp_WhoIsActive @filter_type = 'session' ,@filter = '47'
109+ -- exec sp_WhoIsActive --@find_block_leaders = 1, @sort_order = '[blocked_session_count] DESC [start_time] ASC';
110+ -- EXEC sp_WhoIsActive @filter_type = 'login' ,@filter = 'CORP\dwivedaj_sa'
111+
112+ -- exec sp_WhoIsActive @help = 1
0 commit comments