5
5
ALTER PROCEDURE dbo .sp_BlitzLock
6
6
(
7
7
@Top INT = 2147483647 ,
8
+ @DatabaseName NVARCHAR (256 ) = NULL ,
8
9
@StartDate DATETIME = ' 19000101' ,
9
10
@EndDate DATETIME = ' 99991231' ,
11
+ @ObjectName NVARCHAR (1000 ) = NULL ,
12
+ @StoredProcName NVARCHAR (256 ) = NULL ,
13
+ @AppName NVARCHAR (256 ) = NULL ,
14
+ @HostName NVARCHAR (256 ) = NULL ,
15
+ @LoginName NVARCHAR (256 ) = NULL ,
10
16
@EventSessionPath VARCHAR (256 ) = ' xml_deadlock_report' ,
11
17
@Debug BIT = 0 ,
12
18
@Help BIT = 0 ,
13
19
@VersionDate DATETIME = NULL OUTPUT
14
20
)
15
21
AS
22
+ BEGIN
23
+
16
24
SET NOCOUNT ON ;
17
25
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
18
26
DECLARE @Version VARCHAR (30 );
19
27
SET @Version = ' 1.0' ;
20
28
SET @VersionDate = ' 20171201' ;
21
29
22
30
23
-
24
- BEGIN
25
-
26
31
IF @Help = 1 PRINT '
27
32
/*
28
33
sp_BlitzLock from http://FirstResponderKit.org
@@ -167,9 +172,15 @@ SET @VersionDate = '20171201';
167
172
ORDER BY xml .deadlock_xml .value (' (/event/@timestamp)[1]' , ' datetime' )
168
173
OPTION ( RECOMPILE );
169
174
170
- IF @@ROWCOUNT < 1
175
+ /* Eject early if we don't find anything*/
176
+ IF @@ROWCOUNT = 0
171
177
BEGIN
172
- SELECT N ' WOO-HOO! We couldn'' t find any deadlocks!' AS [Noice],
178
+ SELECT N ' WOO-HOO! We couldn'' t find any deadlocks for '
179
+ + CONVERT (NVARCHAR (30 ), @StartDate)
180
+ + ' through '
181
+ + CONVERT (NVARCHAR (30 ), @EndDate)
182
+ + ' !'
183
+ AS [Noice],
173
184
N ' sp_BlitzLock'AS [Proc Name],
174
185
N ' SQL Server First Responder Kit' AS [FRK],
175
186
N ' http://FirstResponderKit.org/' AS [URL],
@@ -203,8 +214,30 @@ SET @VersionDate = '20171201';
203
214
FROM #deadlock_data AS dd
204
215
CROSS APPLY dd .deadlock_xml .nodes (' //deadlock/process-list/process' ) AS ca(dp)
205
216
CROSS APPLY dd .deadlock_xml .nodes (' //deadlock/process-list/process/inputbuf' ) AS ca2(ib)
217
+ WHERE (ca .dp .value (' @currentdb' , ' BIGINT' ) = DB_ID (@DatabaseName) OR @DatabaseName IS NULL )
218
+ AND (ca .dp .value (' @clientapp' , ' NVARCHAR(256)' ) = @AppName OR @AppName IS NULL )
219
+ AND (ca .dp .value (' @hostname' , ' NVARCHAR(256)' ) = @HostName OR @HostName IS NULL )
220
+ AND (ca .dp .value (' @loginname' , ' NVARCHAR(256)' ) = @LoginName OR @LoginName IS NULL )
206
221
OPTION ( RECOMPILE );
207
222
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
+
208
241
209
242
/* Parse execution stack XML*/
210
243
SELECT dp .id ,
@@ -213,8 +246,21 @@ SET @VersionDate = '20171201';
213
246
INTO #deadlock_stack
214
247
FROM #deadlock_process AS dp
215
248
CROSS APPLY dp .process_xml .nodes (' //executionStack/frame' ) AS ca(dp)
249
+ WHERE (ca .dp .value (' @procname' , ' NVARCHAR(256)' ) = @StoredProcName OR @StoredProcName IS NULL )
216
250
OPTION ( RECOMPILE );
217
251
252
+ /* Eject early if we don't find anything*/
253
+ IF @@ROWCOUNT = 0
254
+ BEGIN
255
+ SELECT N ' WOO-HOO! We couldn'' t find any deadlocks for ' + QUOTENAME (@StoredProcName) + ' !'
256
+ AS [Noice],
257
+ N ' sp_BlitzLock'AS [Proc Name],
258
+ N ' SQL Server First Responder Kit' AS [FRK],
259
+ N ' http://FirstResponderKit.org/' AS [URL],
260
+ N ' To get help or add your own contributions, join us at http://FirstResponderKit.org.' AS [Info];
261
+ RETURN ;
262
+ END ;
263
+
218
264
219
265
/* Grab the full resource list*/
220
266
SELECT ca .dp .query(' .' ) AS resource_xml
@@ -226,7 +272,7 @@ SET @VersionDate = '20171201';
226
272
227
273
/* This parses object locks*/
228
274
SELECT ca .dr .value (' @dbid' , ' BIGINT' ) AS database_id,
229
- ca .dr .value (' @objectname' , ' NVARCHAR(256 )' ) AS object_name ,
275
+ ca .dr .value (' @objectname' , ' NVARCHAR(1000 )' ) AS object_name ,
230
276
ca .dr .value (' @mode' , ' NVARCHAR(256)' ) AS lock_mode,
231
277
w .l .value (' @id' , ' NVARCHAR(256)' ) AS waiter_id,
232
278
w .l .value (' @mode' , ' NVARCHAR(256)' ) AS waiter_mode,
@@ -237,8 +283,21 @@ SET @VersionDate = '20171201';
237
283
CROSS APPLY dr .resource_xml .nodes (' //resource-list/objectlock' ) AS ca(dr)
238
284
CROSS APPLY ca .dr .nodes (' //waiter-list/waiter' ) AS w(l)
239
285
CROSS APPLY ca .dr .nodes (' //owner-list/owner' ) AS o(l)
286
+ WHERE (ca .dr .value (' @objectname' , ' NVARCHAR(1000)' ) = @ObjectName OR @ObjectName IS NULL )
240
287
OPTION ( RECOMPILE );
241
288
289
+ /* Eject early if we don't find anything*/
290
+ IF @@ROWCOUNT = 0
291
+ BEGIN
292
+ SELECT N ' WOO-HOO! We couldn'' t find any deadlocks for ' + @ObjectName + ' !'
293
+ AS [Noice],
294
+ N ' sp_BlitzLock'AS [Proc Name],
295
+ N ' SQL Server First Responder Kit' AS [FRK],
296
+ N ' http://FirstResponderKit.org/' AS [URL],
297
+ N ' To get help or add your own contributions, join us at http://FirstResponderKit.org.' AS [Info];
298
+ RETURN ;
299
+ END ;
300
+
242
301
243
302
/* This parses page locks*/
244
303
INSERT #deadlock_owner_waiter
0 commit comments