Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8b1cca3

Browse files
Merge pull request BrentOzarULTD#1297 from BrentOzarULTD/Issue_1294
Issue 1294
2 parents 7752607 + d161474 commit 8b1cca3

File tree

1 file changed

+76
-13
lines changed

1 file changed

+76
-13
lines changed

‎sp_BlitzLock.sql‎

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /