@@ -208,7 +208,7 @@ SET @VersionDate = '20171201';
208
208
ca .dp .value (' @hostname' , ' NVARCHAR(256)' ) AS host_name ,
209
209
ca .dp .value (' @loginname' , ' NVARCHAR(256)' ) AS login_name,
210
210
ca .dp .value (' @isolationlevel' , ' NVARCHAR(256)' ) AS isolation_level,
211
- CONVERT ( NVARCHAR ( MAX ), ca2 .ib .query(' .') ) AS input_buffer,
211
+ ca2 .ib .query(' .' ) AS input_buffer,
212
212
ca .dp .query(' .' ) AS process_xml
213
213
INTO #deadlock_process
214
214
FROM #deadlock_data AS dd
@@ -533,112 +533,56 @@ SET @VersionDate = '20171201';
533
533
INSERT #deadlock_findings ( check_id, database_name , object_name , finding_group, finding, query_text )
534
534
VALUES ( 0 , N ' sp_BlitzLock' , N ' SQL Server First Responder Kit' , N ' http://FirstResponderKit.org/' , N ' To get help or add your own contributions, join us at http://FirstResponderKit.org.' , NULL );
535
535
536
-
537
536
538
- WITH deadlock_owner_waiter AS (
539
- SELECT DISTINCT database_id, object_name , lock_mode, waiter_id, waiter_mode, owner_id, owner_mode
540
- FROM #deadlock_owner_waiter
541
- )
542
- SELECT CONVERT (XML ,
543
- N ' <Clickme> '
544
- + NCHAR (10 )
545
- + N ' Event Date: '
546
- + CONVERT (NVARCHAR (30 ), CONVERT (DATETIME , owner .event_date))
547
- + NCHAR (10 )
548
- + N ' Owner Information '
549
- + NCHAR (10 )
550
- + N ' =================='
551
- + NCHAR (10 )
552
- + N ' Owner Process: '
553
- + QUOTENAME (SUBSTRING (dow .owner_id , 8 , 128 ))
554
- + NCHAR (10 )
555
- + N ' Owner Login: '
556
- + QUOTENAME (owner .login_name)
557
- + NCHAR (10 )
558
- + N ' Owner Lock Type: '
559
- + QUOTENAME (dow .owner_mode )
560
- + NCHAR (10 )
561
- + N ' Owner Object(s): '
562
- + STUFF ((SELECT DISTINCT N ' , ' + QUOTENAME (ISNULL (dow2 .object_name , N ' ' )) AS object_name
563
- FROM #deadlock_owner_waiter AS dow2
564
- WHERE dow .owner_id = dow2 .owner_id
565
- FOR XML PATH (N ' ' ), TYPE ).value (N ' .[1]' , N ' NVARCHAR(4000)' ), 1 , 2 , N ' ' )
566
- + NCHAR (10 )
567
- + N ' Owner Isolation level: '
568
- + QUOTENAME (owner .isolation_level)
569
- + NCHAR (10 )
570
- + N ' Owner Transaction: '
571
- + QUOTENAME (owner .transaction_name)
572
- + NCHAR (10 )
573
- + N ' Owner Transaction Count: '
574
- + QUOTENAME (owner .transaction_count)
575
- + NCHAR (10 )
576
- + N ' Owner Application: '
577
- + QUOTENAME (owner .client_app)
578
- + NCHAR (10 )
579
- + N ' Owner Host Name: '
580
- + QUOTENAME (owner .host_name )
581
-
582
- + NCHAR (10 )
583
- + NCHAR (10 )
584
-
585
- + N ' Victim Information '
586
- + NCHAR (10 )
587
- + N ' =================='
588
- + NCHAR (10 )
589
- + N ' Victim Process: '
590
- + QUOTENAME (SUBSTRING (dow .waiter_id , 8 , 128 ))
591
- + NCHAR (10 )
592
- + N ' Victim Login '
593
- + QUOTENAME (waiter .login_name )
594
- + NCHAR (10 )
595
- + N ' Victim Lock Type: '
596
- + QUOTENAME (dow .waiter_mode )
597
- + NCHAR (10 )
598
- + N ' Victim Object(s): '
599
- + STUFF ((SELECT DISTINCT N ' , ' + QUOTENAME (ISNULL (dow2 .object_name , N ' ' )) AS object_name
600
- FROM #deadlock_owner_waiter AS dow2
601
- WHERE dow .waiter_id = dow2 .waiter_id
602
- FOR XML PATH (N ' ' ), TYPE ).value (N ' .[1]' , N ' NVARCHAR(4000)' ), 1 , 1 , N ' ' )
603
- + NCHAR (10 )
604
- + N ' Victim Isolation level: '
605
- + QUOTENAME (waiter .isolation_level )
606
- + NCHAR (10 )
607
- + N ' Victim Transaction: '
608
- + QUOTENAME (waiter .transaction_name )
609
- + NCHAR (10 )
610
- + N ' Victim Transaction Count: '
611
- + QUOTENAME (waiter .transaction_count )
612
- + NCHAR (10 )
613
- + N ' Victim Application: '
614
- + QUOTENAME (waiter .client_app )
615
- + NCHAR (10 )
616
- + N ' Owner Host Name: '
617
- + QUOTENAME (owner .host_name )
618
-
619
- + NCHAR (10 )
620
- + N ' </Clickme> '
621
- )
622
- AS [deadlock_story],
623
- CONVERT (XML , STUFF ((SELECT DISTINCT NCHAR (10 ) + ISNULL (dp2 .input_buffer , N ' ' ) AS object_name
624
- FROM #deadlock_process AS dp2
625
- WHERE dow .owner_id = dp2 .id
626
- FOR XML PATH (N ' ' ), TYPE ).value (N ' .[1]' , N ' NVARCHAR(4000)' ), 1 , 1 , N ' ' )) AS ' owner_query' ,
627
-
628
- CONVERT (XML , STUFF ((SELECT DISTINCT NCHAR (10 ) + ISNULL (dp2 .input_buffer , N ' ' ) AS object_name
629
- FROM #deadlock_process AS dp2
630
- WHERE dow .waiter_id = dp2 .id
631
- FOR XML PATH (N ' ' ), TYPE ).value (N ' .[1]' , N ' NVARCHAR(4000)' ), 1 , 1 , N ' ' )) AS ' victim_query'
632
- FROM deadlock_owner_waiter AS dow
633
- JOIN (SELECT TOP 1 *
634
- FROM #deadlock_process AS dp) AS owner
635
- ON owner .id = dow .owner_id
636
- -- AND dow.waiter_id = owner.id
637
- JOIN (SELECT TOP 1 *
638
- FROM #deadlock_process AS dp) AS waiter
639
- ON waiter .id = dow .owner_id
640
- -- AND dow.owner_id = waiter.id
641
- OPTION ( RECOMPILE );
537
+ WITH deadlocks
538
+ AS ( SELECT dp .event_date ,
539
+ dp .id ,
540
+ dp .database_id ,
541
+ dp .log_used ,
542
+ dp .wait_resource ,
543
+ CONVERT (
544
+ XML ,
545
+ STUFF (( SELECT DISTINCT NCHAR (10 )
546
+ + N ' <objects>'
547
+ + ISNULL (dow .object_name , N ' ' )
548
+ + N ' </objects> ' AS object_name
549
+ FROM #deadlock_owner_waiter AS dow
550
+ WHERE dp .id = dow .owner_id
551
+ OR dp .id = dow .waiter_id
552
+ FOR XML PATH (N ' ' ), TYPE ).value (N ' .[1]' , N ' NVARCHAR(4000)' ),
553
+ 1 , 1 , N ' ' )) AS object_name ,
554
+ dp .wait_time ,
555
+ dp .transaction_name ,
556
+ dp .last_tran_started ,
557
+ dp .last_batch_started ,
558
+ dp .last_batch_completed ,
559
+ dp .lock_mode ,
560
+ dp .transaction_count ,
561
+ dp .client_app ,
562
+ dp .host_name ,
563
+ dp .login_name ,
564
+ dp .isolation_level ,
565
+ dp .process_xml .value (' (//process/inputbuf/text())[1]' , ' NVARCHAR(MAX)' ) AS inputbuf,
566
+ ROW_NUMBER () OVER ( PARTITION BY dp .event_date , dp .id ORDER BY dp .event_date ) AS n
567
+ FROM #deadlock_process AS dp )
568
+ SELECT N ' Deadlock #' + CONVERT (NVARCHAR (10 ), d .n ) AS deadlock_number,
569
+ d .event_date ,
570
+ DB_NAME (d .database_id ) AS database_name ,
571
+ CONVERT (XML , N ' <inputbuf>' + d .inputbuf + N ' </inputbuf>' ) AS query,
572
+ d .object_name ,
573
+ d .isolation_level ,
574
+ d .transaction_count ,
575
+ d .login_name ,
576
+ d .host_name ,
577
+ d .client_app ,
578
+ d .wait_time ,
579
+ d .transaction_name ,
580
+ d .last_tran_started ,
581
+ d .last_batch_started ,
582
+ d .last_batch_completed ,
583
+ d .log_used
584
+ FROM deadlocks AS d
585
+ WHERE d .n = 1 ;
642
586
643
587
644
588
0 commit comments