@@ -9,7 +9,7 @@ ALTER PROCEDURE dbo.sp_BlitzLock
9
9
@StartDate DATETIME = ' 19000101' ,
10
10
@EndDate DATETIME = ' 99991231' ,
11
11
@ObjectName NVARCHAR (1000 ) = NULL ,
12
- @StoredProcName NVARCHAR (256 ) = NULL ,
12
+ @StoredProcName NVARCHAR (1000 ) = NULL ,
13
13
@AppName NVARCHAR (256 ) = NULL ,
14
14
@HostName NVARCHAR (256 ) = NULL ,
15
15
@LoginName NVARCHAR (256 ) = NULL ,
23
23
24
24
SET NOCOUNT ON ;
25
25
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
26
+
26
27
DECLARE @Version VARCHAR (30 );
27
28
SET @Version = ' 1.0' ;
28
29
SET @VersionDate = ' 20171201' ;
@@ -48,6 +49,7 @@ SET @VersionDate = '20171201';
48
49
The object name has to be fully qualified '' Database.Schema.Table''
49
50
50
51
@StoredProcName: If you want to search for a single stored proc
52
+ The proc name has to be fully qualified '' Database.Schema.Sproc''
51
53
52
54
@AppName: If you want to filter to a specific application
53
55
@@ -70,9 +72,6 @@ SET @VersionDate = '20171201';
70
72
https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/
71
73
72
74
73
- Parameter explanations:
74
- HOLD YOUR HORSES
75
-
76
75
MIT License
77
76
78
77
All other copyright for sp_BlitzLock are held by Brent Ozar Unlimited, 2017.
@@ -171,23 +170,6 @@ SET @VersionDate = '20171201';
171
170
ORDER BY xml .deadlock_xml .value (' (/event/@timestamp)[1]' , ' datetime' )
172
171
OPTION ( RECOMPILE );
173
172
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
-
191
173
192
174
193
175
/* Parse process and input buffer XML*/
@@ -220,23 +202,6 @@ SET @VersionDate = '20171201';
220
202
AND (ca .dp .value (' @loginname' , ' NVARCHAR(256)' ) = @LoginName OR @LoginName IS NULL )
221
203
OPTION ( RECOMPILE );
222
204
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
-
240
205
241
206
242
207
/* Parse execution stack XML*/
@@ -290,17 +255,6 @@ SET @VersionDate = '20171201';
290
255
WHERE (ca .dr .value (' @objectname' , ' NVARCHAR(1000)' ) = @ObjectName OR @ObjectName IS NULL )
291
256
OPTION ( RECOMPILE );
292
257
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 ;
304
258
305
259
306
260
/* This parses page locks*/
@@ -496,13 +450,23 @@ SET @VersionDate = '20171201';
496
450
WITH deadlock_stack AS (
497
451
SELECT DISTINCT
498
452
ds .id ,
499
- ds .sql_handle ,
500
453
ds .proc_name ,
501
454
ds .event_date ,
502
455
PARSENAME (ds .proc_name , 3 ) AS database_name ,
503
456
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
506
470
)
507
471
INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
508
472
SELECT DISTINCT 7 AS check_id,
@@ -511,8 +475,7 @@ SET @VersionDate = '20171201';
511
475
' More Info - Query' AS finding_group,
512
476
' EXEC sp_BlitzCache ' +
513
477
CASE WHEN ds .proc_name = ' adhoc'
514
- THEN ' @OnlySqlHandles = ' +
515
- QUOTENAME (ds .sql_handle , ' '' ' )
478
+ THEN ' @OnlySqlHandles = ' + sql_handle_csv
516
479
ELSE ' @StoredProcName = ' +
517
480
QUOTENAME (ds .proc_only_name , ' '' ' )
518
481
END +
@@ -752,15 +715,16 @@ SET @VersionDate = '20171201';
752
715
ISNULL (dp .waiter_mode , ' -' ) AS waiter_mode
753
716
FROM #deadlock_process AS dp )
754
717
SELECT d .event_date ,
718
+ DB_NAME (d .database_id ) AS database_name ,
755
719
' Deadlock #'
756
720
+ 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
758
724
AS deadlock_group,
759
- DB_NAME (d .database_id ) AS database_name ,
760
725
CONVERT (XML , N ' <inputbuf>' + d .inputbuf + N ' </inputbuf>' ) AS query,
761
726
d .object_names ,
762
727
d .isolation_level ,
763
- d .is_victim ,
764
728
d .owner_mode ,
765
729
d .waiter_mode ,
766
730
d .transaction_count ,
@@ -775,7 +739,7 @@ SET @VersionDate = '20171201';
775
739
d .transaction_name
776
740
FROM deadlocks AS d
777
741
WHERE d .dn = 1
778
- ORDER BY d .event_date , is_victim DESC
742
+ ORDER BY d .event_date , is_victim DESC ;
779
743
780
744
781
745
0 commit comments