Skip to content

Commit 1641222

Browse files
authored
Merge pull request BrentOzarULTD#658 from BrentOzarULTD/issue_656/brent
BrentOzarULTD#656 sp_BlitzFirst rewrite long-running blocker check
2 parents 241a780 + cd0e7b7 commit 1641222

File tree

1 file changed

+12
-22
lines changed

1 file changed

+12
-22
lines changed

sp_BlitzFirst.sql

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -762,44 +762,34 @@ BEGIN
762762

763763

764764
/* Query Problems - Long-Running Query Blocking Others - CheckID 5 */
765-
/*
766-
IF @Seconds > 0
765+
IF @Seconds > 0 AND EXISTS(SELECT * FROM sys.dm_os_waiting_tasks WHERE wait_type LIKE 'LCK%' AND wait_duration_ms > 30000)
767766
INSERT INTO #BlitzFirstResults (CheckID, Priority, FindingsGroup, Finding, URL, Details, HowToStopIt, QueryPlan, QueryText, StartTime, LoginName, NTUserName, ProgramName, HostName, DatabaseID, DatabaseName, OpenTransactionCount)
768767
SELECT 5 AS CheckID,
769768
1 AS Priority,
770769
'Query Problems' AS FindingGroup,
771770
'Long-Running Query Blocking Others' AS Finding,
772771
'http://www.BrentOzar.com/go/blocking' AS URL,
773-
'Query in ' + DB_NAME(db.resource_database_id) + ' has been running since ' + CAST(r.start_time AS NVARCHAR(100)) + '. ' + @LineFeed + @LineFeed
774-
+ CAST(COALESCE((SELECT TOP 1 [text] FROM sys.dm_exec_sql_text(rBlocker.sql_handle)),
772+
'Query in ' + COALESCE(DB_NAME(COALESCE((SELECT TOP 1 dbid FROM sys.dm_exec_sql_text(r.sql_handle)),
773+
(SELECT TOP 1 t.dbid FROM master..sysprocesses spBlocker CROSS APPLY sys.dm_exec_sql_text(spBlocker.sql_handle) t WHERE spBlocker.spid = tBlocked.blocking_session_id))), '(Unknown)') + ' has a last request start time of ' + CAST(s.last_request_start_time AS NVARCHAR(100)) + '. Query follows:' + @LineFeed + @LineFeed
774+
+ CAST(COALESCE((SELECT TOP 1 [text] FROM sys.dm_exec_sql_text(r.sql_handle)),
775775
(SELECT TOP 1 [text] FROM master..sysprocesses spBlocker CROSS APPLY sys.dm_exec_sql_text(spBlocker.sql_handle) WHERE spBlocker.spid = tBlocked.blocking_session_id), '') AS NVARCHAR(2000)) AS Details,
776776
'KILL ' + CAST(tBlocked.blocking_session_id AS NVARCHAR(100)) + ';' AS HowToStopIt,
777-
(SELECT TOP 1 query_plan FROM sys.dm_exec_query_plan(rBlocker.plan_handle)) AS QueryPlan,
778-
COALESCE((SELECT TOP 1 [text] FROM sys.dm_exec_sql_text(rBlocker.sql_handle)),
777+
(SELECT TOP 1 query_plan FROM sys.dm_exec_query_plan(r.plan_handle)) AS QueryPlan,
778+
COALESCE((SELECT TOP 1 [text] FROM sys.dm_exec_sql_text(r.sql_handle)),
779779
(SELECT TOP 1 [text] FROM master..sysprocesses spBlocker CROSS APPLY sys.dm_exec_sql_text(spBlocker.sql_handle) WHERE spBlocker.spid = tBlocked.blocking_session_id)) AS QueryText,
780780
r.start_time AS StartTime,
781781
s.login_name AS LoginName,
782782
s.nt_user_name AS NTUserName,
783783
s.[program_name] AS ProgramName,
784784
s.[host_name] AS HostName,
785-
db.[resource_database_id] AS DatabaseID,
786-
DB_NAME(db.resource_database_id) AS DatabaseName,
785+
r.[database_id] AS DatabaseID,
786+
DB_NAME(r.database_id) AS DatabaseName,
787787
0 AS OpenTransactionCount
788-
FROM sys.dm_exec_sessions s
789-
INNER JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
788+
FROM sys.dm_os_waiting_tasks tBlocked
789+
INNER JOIN sys.dm_exec_sessions s ON tBlocked.blocking_session_id = s.session_id
790+
LEFT OUTER JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
790791
INNER JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
791-
INNER JOIN sys.dm_os_waiting_tasks tBlocked ON tBlocked.session_id = s.session_id AND tBlocked.session_id <> s.session_id
792-
INNER JOIN (
793-
SELECT DISTINCT request_session_id, resource_database_id
794-
FROM sys.dm_tran_locks
795-
WHERE resource_type = N'DATABASE'
796-
AND request_mode = N'S'
797-
AND request_status = N'GRANT'
798-
AND request_owner_type = N'SHARED_TRANSACTION_WORKSPACE') AS db ON s.session_id = db.request_session_id
799-
LEFT OUTER JOIN sys.dm_exec_requests rBlocker ON tBlocked.blocking_session_id = rBlocker.session_id
800-
WHERE NOT EXISTS (SELECT * FROM sys.dm_os_waiting_tasks tBlocker WHERE tBlocker.session_id = tBlocked.blocking_session_id AND tBlocker.blocking_session_id IS NOT NULL)
801-
AND s.last_request_start_time < DATEADD(SECOND, -30, SYSDATETIMEOFFSET())
802-
*/
792+
WHERE tBlocked.wait_type LIKE 'LCK%' AND tBlocked.wait_duration_ms > 30000;
803793

804794
/* Query Problems - Plan Cache Erased Recently */
805795
IF DATEADD(mi, -15, SYSDATETIMEOFFSET()) < (SELECT TOP 1 creation_time FROM sys.dm_exec_query_stats ORDER BY creation_time)

0 commit comments

Comments
 (0)