@@ -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 ,
2323
2424SET NOCOUNT ON ;
2525SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
26+ 2627DECLARE @Version VARCHAR (30 );
2728SET @Version = ' 1.0' ;
2829SET @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