@@ -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