Skip to content

Commit e917f32

Browse files
committed
Fix incorrect heap identification
Closes #2360 Fixes incorrect heap identification, and makes the reporting check more clearerly.
1 parent 50b243d commit e917f32

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed

sp_BlitzLock.sql

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,8 @@ You need to use an Azure storage account, and the path has to look like this: ht
421421
w.l.value('@id', 'NVARCHAR(256)') AS waiter_id,
422422
w.l.value('@mode', 'NVARCHAR(256)') AS waiter_mode,
423423
o.l.value('@id', 'NVARCHAR(256)') AS owner_id,
424-
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode
424+
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode,
425+
N'OBJECT' AS lock_type
425426
INTO #deadlock_owner_waiter
426427
FROM (
427428
SELECT dr.event_date,
@@ -453,7 +454,8 @@ You need to use an Azure storage account, and the path has to look like this: ht
453454
w.l.value('@id', 'NVARCHAR(256)') AS waiter_id,
454455
w.l.value('@mode', 'NVARCHAR(256)') AS waiter_mode,
455456
o.l.value('@id', 'NVARCHAR(256)') AS owner_id,
456-
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode
457+
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode,
458+
N'PAGE' AS lock_type
457459
FROM (
458460
SELECT dr.event_date,
459461
ca.dr.value('@dbid', 'BIGINT') AS database_id,
@@ -482,7 +484,8 @@ You need to use an Azure storage account, and the path has to look like this: ht
482484
w.l.value('@id', 'NVARCHAR(256)') AS waiter_id,
483485
w.l.value('@mode', 'NVARCHAR(256)') AS waiter_mode,
484486
o.l.value('@id', 'NVARCHAR(256)') AS owner_id,
485-
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode
487+
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode,
488+
N'KEY' AS lock_type
486489
FROM (
487490
SELECT dr.event_date,
488491
ca.dr.value('@dbid', 'BIGINT') AS database_id,
@@ -511,7 +514,8 @@ You need to use an Azure storage account, and the path has to look like this: ht
511514
w.l.value('@id', 'NVARCHAR(256)') AS waiter_id,
512515
w.l.value('@mode', 'NVARCHAR(256)') AS waiter_mode,
513516
o.l.value('@id', 'NVARCHAR(256)') AS owner_id,
514-
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode
517+
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode,
518+
N'RID' AS lock_type
515519
FROM (
516520
SELECT dr.event_date,
517521
ca.dr.value('@dbid', 'BIGINT') AS database_id,
@@ -540,7 +544,8 @@ You need to use an Azure storage account, and the path has to look like this: ht
540544
w.l.value('@id', 'NVARCHAR(256)') AS waiter_id,
541545
w.l.value('@mode', 'NVARCHAR(256)') AS waiter_mode,
542546
o.l.value('@id', 'NVARCHAR(256)') AS owner_id,
543-
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode
547+
o.l.value('@mode', 'NVARCHAR(256)') AS owner_mode,
548+
N'ROWGROUP' AS lock_type
544549
FROM (
545550
SELECT dr.event_date,
546551
ca.dr.value('@dbid', 'BIGINT') AS database_id,
@@ -559,7 +564,7 @@ You need to use an Azure storage account, and the path has to look like this: ht
559564
SET d.index_name = d.object_name
560565
+ '.HEAP'
561566
FROM #deadlock_owner_waiter AS d
562-
WHERE index_name IS NULL
567+
WHERE lock_type IN (N'HEAP', N'RID')
563568
OPTION(RECOMPILE);
564569

565570
/*Parse parallel deadlocks*/
@@ -786,10 +791,32 @@ You need to use an Azure storage account, and the path has to look like this: ht
786791
AND (dow.event_date >= @StartDate OR @StartDate IS NULL)
787792
AND (dow.event_date < @EndDate OR @EndDate IS NULL)
788793
AND (dow.object_name = @ObjectName OR @ObjectName IS NULL)
789-
AND dow.index_name IS NOT NULL
794+
AND dow.lock_type NOT IN (N'HEAP', N'RID')
790795
GROUP BY DB_NAME(dow.database_id), dow.index_name
791796
OPTION ( RECOMPILE );
792797

798+
799+
/*Check 2 continuation, number of locks per heap*/
800+
SET @d = CONVERT(VARCHAR(40), GETDATE(), 109);
801+
RAISERROR('Check 2 heaps %s', 0, 1, @d) WITH NOWAIT;
802+
INSERT #deadlock_findings WITH (TABLOCKX)
803+
( check_id, database_name, object_name, finding_group, finding )
804+
SELECT 2 AS check_id,
805+
ISNULL(DB_NAME(dow.database_id), 'UNKNOWN') AS database_name,
806+
dow.index_name AS index_name,
807+
'Total heap deadlocks' AS finding_group,
808+
'This heap was involved in '
809+
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dow.event_date))
810+
+ ' deadlock(s).'
811+
FROM #deadlock_owner_waiter AS dow
812+
WHERE 1 = 1
813+
AND (DB_NAME(dow.database_id) = @DatabaseName OR @DatabaseName IS NULL)
814+
AND (dow.event_date >= @StartDate OR @StartDate IS NULL)
815+
AND (dow.event_date < @EndDate OR @EndDate IS NULL)
816+
AND (dow.object_name = @ObjectName OR @ObjectName IS NULL)
817+
AND dow.lock_type IN (N'HEAP', N'RID')
818+
GROUP BY DB_NAME(dow.database_id), dow.index_name
819+
OPTION ( RECOMPILE );
793820

794821

795822
/*Check 3 looks for Serializable locking*/

0 commit comments

Comments
 (0)