@@ -241,7 +241,7 @@ SET @VersionDate = '20171201';
241241
242242 /* Parse execution stack XML*/
243243 SELECT dp .id ,
244- ca .dp .value (' @procname' , ' NVARCHAR(256 )' ) AS proc_name,
244+ ca .dp .value (' @procname' , ' NVARCHAR(1000 )' ) AS proc_name,
245245 ca .dp .value (' @sqlhandle' , ' NVARCHAR(128)' ) AS sql_handle
246246 INTO #deadlock_stack
247247 FROM #deadlock_process AS dp
@@ -349,7 +349,7 @@ SET @VersionDate = '20171201';
349349 /* Get rid of nonsense*/
350350 DELETE dow
351351 FROM #deadlock_owner_waiter AS dow
352- WHERE owner_id = waiter_id
352+ WHERE dow . owner_id = dow . waiter_id ;
353353
354354 /* Add some nonsense*/
355355 ALTER TABLE #deadlock_process
@@ -363,14 +363,14 @@ SET @VersionDate = '20171201';
363363 FROM #deadlock_process AS dp
364364 JOIN #deadlock_owner_waiter AS dow
365365 ON dp .id = dow .owner_id
366- WHERE dp .is_victim = 0
366+ WHERE dp .is_victim = 0 ;
367367
368368 UPDATE dp
369369 SET dp .waiter_mode = dow .waiter_mode
370370 FROM #deadlock_process AS dp
371371 JOIN #deadlock_owner_waiter AS dow
372372 ON dp .victim_id = dow .waiter_id
373- WHERE dp .is_victim = 1
373+ WHERE dp .is_victim = 1 ;
374374
375375
376376 /* Begin checks based on parsed values*/
@@ -482,7 +482,17 @@ SET @VersionDate = '20171201';
482482 OPTION ( RECOMPILE );
483483
484484
485- /* Check 7 gives you more info queries for sp_BlitzCache */
485+ /* Check 7 gives you more info queries for sp_BlitzCache & BlitzQueryStore*/
486+ WITH deadlock_stack AS (
487+ SELECT DISTINCT
488+ ds .id ,
489+ ds .sql_handle ,
490+ ds .proc_name ,
491+ PARSENAME (ds .proc_name , 3 ) AS database_name ,
492+ PARSENAME (ds .proc_name , 2 ) AS schema_name ,
493+ PARSENAME (ds .proc_name , 1 ) AS proc_only_name
494+ FROM #deadlock_stack AS ds
495+ )
486496 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
487497 SELECT DISTINCT 7 AS check_id,
488498 DB_NAME (dow .database_id ) AS database_name ,
@@ -493,16 +503,69 @@ SET @VersionDate = '20171201';
493503 THEN ' @OnlySqlHandles = ' +
494504 QUOTENAME (ds .sql_handle , ' '' ' )
495505 ELSE ' @StoredProcName = ' +
496- QUOTENAME (ds .proc_name , ' '' ' )
506+ QUOTENAME (ds .proc_only_name , ' '' ' )
497507 END +
498508 ' ;' AS finding
499- FROM # deadlock_stack AS ds
509+ FROM deadlock_stack AS ds
500510 JOIN #deadlock_owner_waiter AS dow
501511 ON dow .owner_id = ds .id
502512 OPTION ( RECOMPILE );
503513
514+ IF @ProductVersionMajor >= 13
515+ BEGIN
516+ 517+ WITH deadlock_stack AS (
518+ SELECT DISTINCT
519+ ds .id ,
520+ ds .sql_handle ,
521+ ds .proc_name ,
522+ PARSENAME (ds .proc_name , 3 ) AS database_name ,
523+ PARSENAME (ds .proc_name , 2 ) AS schema_name ,
524+ PARSENAME (ds .proc_name , 1 ) AS proc_only_name
525+ FROM #deadlock_stack AS ds
526+ )
527+ INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
528+ SELECT DISTINCT 7 AS check_id,
529+ DB_NAME (dow .database_id ) AS database_name ,
530+ ds .proc_name AS object_name ,
531+ ' More Info - Query' AS finding_group,
532+ ' EXEC sp_BlitzQueryStore '
533+ + ' @DatabaseName = '
534+ + QUOTENAME (ds .database_name , ' '' ' )
535+ + ' , '
536+ + ' @StoredProcName = '
537+ + QUOTENAME (ds .proc_only_name , ' '' ' )
538+ + ' ;' AS finding
539+ FROM deadlock_stack AS ds
540+ JOIN #deadlock_owner_waiter AS dow
541+ ON dow .owner_id = ds .id
542+ WHERE ds .proc_name <> ' adhoc'
543+ OPTION ( RECOMPILE );
544+ END ;
545+ 546+ 547+ /* Check 8 gives you stored proc deadlock counts*/
548+ INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
549+ SELECT 8 AS check_id,
550+ DB_NAME (dp .database_id ) AS database_name ,
551+ ds .proc_name ,
552+ ' Stored Procedure Deadlocks' ,
553+ ' The stored procedure '
554+ + PARSENAME (ds .proc_name , 2 )
555+ + ' .'
556+ + PARSENAME (ds .proc_name , 1 )
557+ + ' has been involved in '
558+ + CONVERT (NVARCHAR (10 ), COUNT_BIG (DISTINCT ds .id ))
559+ + ' deadlocks.'
560+ FROM #deadlock_stack AS ds
561+ JOIN #deadlock_process AS dp
562+ ON dp .id = ds .id
563+ WHERE ds .proc_name <> ' adhoc'
564+ GROUP BY DB_NAME (dp .database_id ), ds .proc_name
565+ OPTION (RECOMPILE );
566+ 504567
505- /* Check 8 gives you more info queries for sp_BlitzCache */
568+ /* Check 9 gives you more info queries for sp_BlitzIndex */
506569 WITH bi AS (
507570 SELECT DISTINCT
508571 dow .object_name ,
@@ -512,7 +575,7 @@ SET @VersionDate = '20171201';
512575 FROM #deadlock_owner_waiter AS dow
513576 )
514577 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
515- SELECT 8 AS check_id,
578+ SELECT 9 AS check_id,
516579 bi .database_name ,
517580 bi .schema_name + ' .' + bi .table_name ,
518581 ' More Info - Table' AS finding_group,
@@ -524,7 +587,7 @@ SET @VersionDate = '20171201';
524587 FROM bi
525588 OPTION ( RECOMPILE );
526589
527- /* Check 9 gets total deadlock wait time per object*/
590+ /* Check 10 gets total deadlock wait time per object*/
528591 WITH chop AS (
529592 SELECT SUBSTRING (dp .wait_resource ,
530593 CHARINDEX (' :' , dp .wait_resource , CHARINDEX (' :' , dp .wait_resource )) + 2 ,
@@ -558,7 +621,7 @@ SET @VersionDate = '20171201';
558621 FROM suey AS s
559622 )
560623 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
561- SELECT 9 AS check_id,
624+ SELECT 10 AS check_id,
562625 cs .database_name ,
563626 cs .object_name ,
564627 ' Total object deadlock wait time' AS finding_group,
@@ -570,15 +633,15 @@ SET @VersionDate = '20171201';
570633 WHERE cs .object_name IS NOT NULL
571634 OPTION ( RECOMPILE );
572635
573- /* Check 10 gets total deadlock wait time per database*/
636+ /* Check 11 gets total deadlock wait time per database*/
574637 WITH wait_time AS (
575638 SELECT DB_NAME (dp .database_id ) AS database_name ,
576639 SUM (CONVERT (BIGINT , dp .wait_time )) AS total_wait_time_ms
577640 FROM #deadlock_process AS dp
578641 GROUP BY DB_NAME (dp .database_id )
579642 )
580643 INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding )
581- SELECT 10 AS check_id,
644+ SELECT 11 AS check_id,
582645 wt .database_name ,
583646 ' -' AS object_name ,
584647 ' Total database deadlock wait time' AS finding_group,
0 commit comments