@@ -18,6 +18,7 @@ ALTER PROCEDURE dbo.sp_BlitzLock
1818 @Help BIT = 0 ,
1919 @VersionDate DATETIME = NULL OUTPUT
2020)
21+ WITH RECOMPILE
2122AS
2223BEGIN
2324
@@ -313,7 +314,8 @@ SET @VersionDate = '20180101';
313314 /* Get rid of nonsense*/
314315 DELETE dow
315316 FROM #deadlock_owner_waiter AS dow
316- WHERE dow .owner_id = dow .waiter_id ;
317+ WHERE dow .owner_id = dow .waiter_id
318+ OPTION ( RECOMPILE );
317319
318320 /* Add some nonsense*/
319321 ALTER TABLE #deadlock_process
@@ -328,15 +330,17 @@ SET @VersionDate = '20180101';
328330 JOIN #deadlock_owner_waiter AS dow
329331 ON dp .id = dow .owner_id
330332 AND dp .event_date = dow .event_date
331- WHERE dp .is_victim = 0 ;
333+ WHERE dp .is_victim = 0
334+ OPTION ( RECOMPILE );
332335
333336 UPDATE dp
334337 SET dp .waiter_mode = dow .waiter_mode
335338 FROM #deadlock_process AS dp
336339 JOIN #deadlock_owner_waiter AS dow
337340 ON dp .victim_id = dow .waiter_id
338341 AND dp .event_date = dow .event_date
339- WHERE dp .is_victim = 1 ;
342+ WHERE dp .is_victim = 1
343+ OPTION ( RECOMPILE );
340344
341345
342346 /* Begin checks based on parsed values*/
@@ -351,6 +355,13 @@ SET @VersionDate = '20180101';
351355 + CONVERT (NVARCHAR (20 ), COUNT_BIG (DISTINCT dp .event_date ))
352356 + ' deadlocks.'
353357 FROM #deadlock_process AS dp
358+ WHERE 1 = 1
359+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
360+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
361+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
362+ AND (dp .client_app = @AppName OR @AppName IS NULL )
363+ AND (dp .host_name = @HostName OR @HostName IS NULL )
364+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
354365 GROUP BY DB_NAME (dp .database_id )
355366 OPTION ( RECOMPILE );
356367
@@ -365,6 +376,11 @@ SET @VersionDate = '20180101';
365376 + CONVERT (NVARCHAR (20 ), COUNT_BIG (DISTINCT dow .object_name ))
366377 + ' deadlock(s).'
367378 FROM #deadlock_owner_waiter AS dow
379+ WHERE 1 = 1
380+ AND (DB_NAME (dow .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
381+ AND (dow .event_date >= @StartDate OR @StartDate IS NULL )
382+ AND (dow .event_date < @EndDate OR @EndDate IS NULL )
383+ AND (dow .object_name = @ObjectName OR @ObjectName IS NULL )
368384 GROUP BY DB_NAME (dow .database_id ), dow .object_name
369385 OPTION ( RECOMPILE );
370386
@@ -381,6 +397,12 @@ SET @VersionDate = '20180101';
381397 AS finding
382398 FROM #deadlock_process AS dp
383399 WHERE dp .isolation_level LIKE ' serializable%'
400+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
401+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
402+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
403+ AND (dp .client_app = @AppName OR @AppName IS NULL )
404+ AND (dp .host_name = @HostName OR @HostName IS NULL )
405+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
384406 GROUP BY DB_NAME (dp .database_id )
385407 OPTION ( RECOMPILE );
386408
@@ -397,6 +419,12 @@ SET @VersionDate = '20180101';
397419 AS finding
398420 FROM #deadlock_process AS dp
399421 WHERE dp .isolation_level LIKE ' repeatable read%'
422+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
423+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
424+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
425+ AND (dp .client_app = @AppName OR @AppName IS NULL )
426+ AND (dp .host_name = @HostName OR @HostName IS NULL )
427+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
400428 GROUP BY DB_NAME (dp .database_id )
401429 OPTION ( RECOMPILE );
402430
@@ -417,6 +445,13 @@ SET @VersionDate = '20180101';
417445 ISNULL (dp .host_name , ' UNKNOWN' )
418446 AS finding
419447 FROM #deadlock_process AS dp
448+ WHERE 1 = 1
449+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
450+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
451+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
452+ AND (dp .client_app = @AppName OR @AppName IS NULL )
453+ AND (dp .host_name = @HostName OR @HostName IS NULL )
454+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
420455 GROUP BY DB_NAME (dp .database_id ), dp .login_name , dp .client_app , dp .host_name
421456 OPTION ( RECOMPILE );
422457
@@ -431,6 +466,14 @@ SET @VersionDate = '20180101';
431466 JOIN #deadlock_owner_waiter AS dow
432467 ON dp .id = dow .owner_id
433468 AND dp .event_date = dow .event_date
469+ WHERE 1 = 1
470+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
471+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
472+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
473+ AND (dp .client_app = @AppName OR @AppName IS NULL )
474+ AND (dp .host_name = @HostName OR @HostName IS NULL )
475+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
476+ AND (dow .object_name = @ObjectName OR @ObjectName IS NULL )
434477 GROUP BY DB_NAME (dp .database_id ), SUBSTRING (dp .wait_resource , 1 , CHARINDEX (' :' , dp .wait_resource ) - 1 ), dow .object_name
435478 )
436479 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
@@ -487,6 +530,11 @@ SET @VersionDate = '20180101';
487530 JOIN #deadlock_owner_waiter AS dow
488531 ON dow .owner_id = ds .id
489532 AND dow .event_date = ds .event_date
533+ WHERE 1 = 1
534+ AND (DB_NAME (dow .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
535+ AND (dow .event_date >= @StartDate OR @StartDate IS NULL )
536+ AND (dow .event_date < @EndDate OR @EndDate IS NULL )
537+ AND (dow .object_name = @StoredProcName OR @StoredProcName IS NULL )
490538 OPTION ( RECOMPILE );
491539
492540 IF @ProductVersionMajor >= 13
@@ -520,6 +568,10 @@ SET @VersionDate = '20180101';
520568 ON dow .owner_id = ds .id
521569 AND dow .event_date = ds .event_date
522570 WHERE ds .proc_name <> ' adhoc'
571+ AND (DB_NAME (dow .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
572+ AND (dow .event_date >= @StartDate OR @StartDate IS NULL )
573+ AND (dow .event_date < @EndDate OR @EndDate IS NULL )
574+ AND (dow .object_name = @StoredProcName OR @StoredProcName IS NULL )
523575 OPTION ( RECOMPILE );
524576 END ;
525577
@@ -542,6 +594,13 @@ SET @VersionDate = '20180101';
542594 ON dp .id = ds .id
543595 AND ds .event_date = dp .event_date
544596 WHERE ds .proc_name <> ' adhoc'
597+ AND (ds .proc_name = @StoredProcName OR @StoredProcName IS NULL )
598+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
599+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
600+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
601+ AND (dp .client_app = @AppName OR @AppName IS NULL )
602+ AND (dp .host_name = @HostName OR @HostName IS NULL )
603+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
545604 GROUP BY DB_NAME (dp .database_id ), ds .proc_name
546605 OPTION (RECOMPILE );
547606
@@ -554,6 +613,11 @@ SET @VersionDate = '20180101';
554613 PARSENAME (dow .object_name , 2 ) AS schema_name ,
555614 PARSENAME (dow .object_name , 1 ) AS table_name
556615 FROM #deadlock_owner_waiter AS dow
616+ WHERE 1 = 1
617+ AND (DB_NAME (dow .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
618+ AND (dow .event_date >= @StartDate OR @StartDate IS NULL )
619+ AND (dow .event_date < @EndDate OR @EndDate IS NULL )
620+ AND (dow .object_name = @ObjectName OR @ObjectName IS NULL )
557621 )
558622 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
559623 SELECT 9 AS check_id,
@@ -579,6 +643,14 @@ SET @VersionDate = '20180101';
579643 JOIN #deadlock_process AS dp
580644 ON (dp .id = dow .owner_id OR dp .victim_id = dow .waiter_id )
581645 AND dp .event_date = dow .event_date
646+ WHERE 1 = 1
647+ AND (DB_NAME (dow .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
648+ AND (dow .event_date >= @StartDate OR @StartDate IS NULL )
649+ AND (dow .event_date < @EndDate OR @EndDate IS NULL )
650+ AND (dow .object_name = @ObjectName OR @ObjectName IS NULL )
651+ AND (dp .client_app = @AppName OR @AppName IS NULL )
652+ AND (dp .host_name = @HostName OR @HostName IS NULL )
653+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
582654 GROUP BY PARSENAME (dow .object_name , 3 ), dow .object_name
583655 )
584656 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
@@ -599,6 +671,13 @@ SET @VersionDate = '20180101';
599671 SELECT DB_NAME (dp .database_id ) AS database_name ,
600672 SUM (CONVERT (BIGINT , dp .wait_time )) AS total_wait_time_ms
601673 FROM #deadlock_process AS dp
674+ WHERE 1 = 1
675+ AND (DB_NAME (dp .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
676+ AND (dp .event_date >= @StartDate OR @StartDate IS NULL )
677+ AND (dp .event_date < @EndDate OR @EndDate IS NULL )
678+ AND (dp .client_app = @AppName OR @AppName IS NULL )
679+ AND (dp .host_name = @HostName OR @HostName IS NULL )
680+ AND (dp .login_name = @LoginName OR @LoginName IS NULL )
602681 GROUP BY DB_NAME (dp .database_id )
603682 )
604683 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
@@ -727,7 +806,15 @@ SET @VersionDate = '20180101';
727806 d .transaction_name
728807 FROM deadlocks AS d
729808 WHERE d .dn = 1
730- ORDER BY d .event_date , is_victim DESC ;
809+ AND (DB_NAME (d .database_id ) = @DatabaseName OR @DatabaseName IS NULL )
810+ AND (d .event_date >= @StartDate OR @StartDate IS NULL )
811+ AND (d .event_date < @EndDate OR @EndDate IS NULL )
812+ AND (CONVERT (NVARCHAR (MAX ), d .object_names ) LIKE ' %' + @ObjectName + ' %' OR @ObjectName IS NULL )
813+ AND (d .client_app = @AppName OR @AppName IS NULL )
814+ AND (d .host_name = @HostName OR @HostName IS NULL )
815+ AND (d .login_name = @LoginName OR @LoginName IS NULL )
816+ ORDER BY d .event_date , is_victim DESC
817+ OPTION ( RECOMPILE );
731818
732819
733820
0 commit comments