Skip to content

Commit 4939bf3

Browse files
authored
Merge pull request BrentOzarULTD#1306 from BrentOzarULTD/Issue_1305
Pull early ejects
2 parents f6a9724 + 0f3f1ac commit 4939bf3

File tree

1 file changed

+22
-58
lines changed

1 file changed

+22
-58
lines changed

sp_BlitzLock.sql

Lines changed: 22 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ALTER PROCEDURE dbo.sp_BlitzLock
99
@StartDate DATETIME = '19000101',
1010
@EndDate DATETIME = '99991231',
1111
@ObjectName NVARCHAR(1000) = NULL,
12-
@StoredProcName NVARCHAR(256) = NULL,
12+
@StoredProcName NVARCHAR(1000) = NULL,
1313
@AppName NVARCHAR(256) = NULL,
1414
@HostName NVARCHAR(256) = NULL,
1515
@LoginName NVARCHAR(256) = NULL,
@@ -23,6 +23,7 @@ BEGIN
2323

2424
SET NOCOUNT ON;
2525
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
26+
2627
DECLARE @Version VARCHAR(30);
2728
SET @Version = '1.0';
2829
SET @VersionDate = '20171201';
@@ -48,6 +49,7 @@ SET @VersionDate = '20171201';
4849
The object name has to be fully qualified ''Database.Schema.Table''
4950
5051
@StoredProcName: If you want to search for a single stored proc
52+
The proc name has to be fully qualified ''Database.Schema.Sproc''
5153
5254
@AppName: If you want to filter to a specific application
5355
@@ -70,9 +72,6 @@ SET @VersionDate = '20171201';
7072
https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/
7173
7274
73-
Parameter explanations:
74-
HOLD YOUR HORSES
75-
7675
MIT License
7776
7877
All other copyright for sp_BlitzLock are held by Brent Ozar Unlimited, 2017.
@@ -171,23 +170,6 @@ SET @VersionDate = '20171201';
171170
ORDER BY xml.deadlock_xml.value('(/event/@timestamp)[1]', 'datetime')
172171
OPTION ( RECOMPILE );
173172

174-
/*Eject early if we don't find anything*/
175-
IF @@ROWCOUNT = 0
176-
BEGIN
177-
SELECT N'WOO-HOO! We couldn''t find any deadlocks for '
178-
+ CONVERT(NVARCHAR(30), @StartDate)
179-
+ ' through '
180-
+ CONVERT(NVARCHAR(30), @EndDate)
181-
+ '!'
182-
AS [Noice],
183-
N'sp_BlitzLock'AS [Proc Name],
184-
N'SQL Server First Responder Kit' AS [FRK],
185-
N'http://FirstResponderKit.org/' AS [URL],
186-
N'To get help or add your own contributions, join us at http://FirstResponderKit.org.' AS [Info];
187-
RETURN;
188-
END;
189-
190-
191173

192174

193175
/*Parse process and input buffer XML*/
@@ -220,23 +202,6 @@ SET @VersionDate = '20171201';
220202
AND (ca.dp.value('@loginname', 'NVARCHAR(256)') = @LoginName OR @LoginName IS NULL)
221203
OPTION ( RECOMPILE );
222204

223-
224-
/*Eject early if we don't find anything*/
225-
IF @@ROWCOUNT = 0
226-
BEGIN
227-
SELECT N'WOO-HOO! We couldn''t find any deadlocks for '
228-
+ CASE WHEN @DatabaseName IS NOT NULL THEN 'Database:' + QUOTENAME(@DatabaseName) + ' ' ELSE '' END
229-
+ CASE WHEN @AppName IS NOT NULL THEN 'Application:' + QUOTENAME(@AppName) + ' ' ELSE '' END
230-
+ CASE WHEN @HostName IS NOT NULL THEN 'Host:' + QUOTENAME(@HostName) + ' ' ELSE '' END
231-
+ CASE WHEN @LoginName IS NOT NULL THEN 'Login:' + QUOTENAME(@LoginName) + ' ' ELSE '' END
232-
+ '!' AS [Noice],
233-
N'sp_BlitzLock'AS [Proc Name],
234-
N'SQL Server First Responder Kit' AS [FRK],
235-
N'http://FirstResponderKit.org/' AS [URL],
236-
N'To get help or add your own contributions, join us at http://FirstResponderKit.org.' AS [Info];
237-
RETURN;
238-
END;
239-
240205

241206

242207
/*Parse execution stack XML*/
@@ -290,17 +255,6 @@ SET @VersionDate = '20171201';
290255
WHERE (ca.dr.value('@objectname', 'NVARCHAR(1000)') = @ObjectName OR @ObjectName IS NULL)
291256
OPTION ( RECOMPILE );
292257

293-
/*Eject early if we don't find anything*/
294-
IF @@ROWCOUNT = 0
295-
BEGIN
296-
SELECT N'WOO-HOO! We couldn''t find any deadlocks for ' + @ObjectName + '!'
297-
AS [Noice],
298-
N'sp_BlitzLock'AS [Proc Name],
299-
N'SQL Server First Responder Kit' AS [FRK],
300-
N'http://FirstResponderKit.org/' AS [URL],
301-
N'To get help or add your own contributions, join us at http://FirstResponderKit.org.' AS [Info];
302-
RETURN;
303-
END;
304258

305259

306260
/*This parses page locks*/
@@ -496,13 +450,23 @@ SET @VersionDate = '20171201';
496450
WITH deadlock_stack AS (
497451
SELECT DISTINCT
498452
ds.id,
499-
ds.sql_handle,
500453
ds.proc_name,
501454
ds.event_date,
502455
PARSENAME(ds.proc_name, 3) AS database_name,
503456
PARSENAME(ds.proc_name, 2) AS schema_name,
504-
PARSENAME(ds.proc_name, 1) AS proc_only_name
505-
FROM #deadlock_stack AS ds
457+
PARSENAME(ds.proc_name, 1) AS proc_only_name,
458+
'''' + STUFF((SELECT DISTINCT N',' + ds2.sql_handle
459+
FROM #deadlock_stack AS ds2
460+
WHERE ds2.id = ds.id
461+
AND ds2.event_date = ds.event_date
462+
FOR XML PATH(N''), TYPE).value(N'.[1]', N'NVARCHAR(MAX)'), 1, 1, N'') + '''' AS sql_handle_csv
463+
FROM #deadlock_stack AS ds
464+
GROUP BY PARSENAME(ds.proc_name, 3),
465+
PARSENAME(ds.proc_name, 2),
466+
PARSENAME(ds.proc_name, 1),
467+
ds.id,
468+
ds.proc_name,
469+
ds.event_date
506470
)
507471
INSERT #deadlock_findings ( check_id, database_name, object_name, finding_group, finding )
508472
SELECT DISTINCT 7 AS check_id,
@@ -511,8 +475,7 @@ SET @VersionDate = '20171201';
511475
'More Info - Query' AS finding_group,
512476
'EXEC sp_BlitzCache ' +
513477
CASE WHEN ds.proc_name = 'adhoc'
514-
THEN ' @OnlySqlHandles = ' +
515-
QUOTENAME(ds.sql_handle, '''')
478+
THEN ' @OnlySqlHandles = ' + sql_handle_csv
516479
ELSE '@StoredProcName = ' +
517480
QUOTENAME(ds.proc_only_name, '''')
518481
END +
@@ -752,15 +715,16 @@ SET @VersionDate = '20171201';
752715
ISNULL(dp.waiter_mode, '-') AS waiter_mode
753716
FROM #deadlock_process AS dp )
754717
SELECT d.event_date,
718+
DB_NAME(d.database_id) AS database_name,
755719
'Deadlock #'
756720
+ CONVERT(NVARCHAR(10), d.en)
757-
+ ', Query #' + CASE WHEN d.qn = 0 THEN N'1' ELSE CONVERT(NVARCHAR(10), d.qn) END
721+
+ ', Query #'
722+
+ CASE WHEN d.qn = 0 THEN N'1' ELSE CONVERT(NVARCHAR(10), d.qn) END
723+
+ CASE WHEN d.is_victim = 1 THEN ' - VICTIM' ELSE '' END
758724
AS deadlock_group,
759-
DB_NAME(d.database_id) AS database_name,
760725
CONVERT(XML, N'<inputbuf>' + d.inputbuf + N'</inputbuf>') AS query,
761726
d.object_names,
762727
d.isolation_level,
763-
d.is_victim,
764728
d.owner_mode,
765729
d.waiter_mode,
766730
d.transaction_count,
@@ -775,7 +739,7 @@ SET @VersionDate = '20171201';
775739
d.transaction_name
776740
FROM deadlocks AS d
777741
WHERE d.dn = 1
778-
ORDER BY d.event_date, is_victim DESC
742+
ORDER BY d.event_date, is_victim DESC;
779743

780744

781745

0 commit comments

Comments
 (0)