@@ -3555,6 +3555,233 @@ BEGIN
35553555 b .host_name
35563556 OPTION (RECOMPILE );
35573557
3558+ IF @debug = 1
3559+ BEGIN
3560+ RAISERROR (' Inserting #block_findings, check_id 9' , 0 , 1 ) WITH NOWAIT ;
3561+ END ;
3562+
3563+ WITH
3564+ blocker_waits AS
3565+ (
3566+ SELECT
3567+ b .database_name ,
3568+ query_text_pre =
3569+ b .query_text_pre ,
3570+ b .transaction_id ,
3571+ sql_handle =
3572+ CONVERT
3573+ (
3574+ varbinary (64 ),
3575+ b .blocked_process_report .value
3576+ (
3577+ ' (/event/data/value/blocked-process-report/blocking-process/process/executionStack/frame[not(@sqlhandle = "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]/@sqlhandle)[1]' ,
3578+ ' varchar(130)'
3579+ ),
3580+ 1
3581+ ),
3582+ stmtstart =
3583+ ISNULL
3584+ (
3585+ b .blocked_process_report .value
3586+ (
3587+ ' (/event/data/value/blocked-process-report/blocking-process/process/executionStack/frame[not(@sqlhandle = "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]/@stmtstart)[1]' ,
3588+ ' integer'
3589+ ),
3590+ 0
3591+ ),
3592+ stmtend =
3593+ ISNULL
3594+ (
3595+ b .blocked_process_report .value
3596+ (
3597+ ' (/event/data/value/blocked-process-report/blocking-process/process/executionStack/frame[not(@sqlhandle = "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]/@stmtend)[1]' ,
3598+ ' integer'
3599+ ),
3600+ - 1
3601+ ),
3602+ wait_time_ms =
3603+ ISNULL
3604+ (
3605+ b .blocked_process_report .value
3606+ (
3607+ ' (/event/data/value/blocked-process-report/blocked-process/process/@waittime)[1]' ,
3608+ ' bigint'
3609+ ),
3610+ 0
3611+ )
3612+ FROM #blocks AS b
3613+ WHERE b .activity = ' blocking'
3614+ AND (b .database_name = @database_name
3615+ OR @database_name IS NULL )
3616+ AND (b .contentious_object = @object_name
3617+ OR @object_name IS NULL )
3618+ ),
3619+ blocker_per_victim AS
3620+ (
3621+ SELECT
3622+ bw .database_name ,
3623+ bw .sql_handle ,
3624+ bw .stmtstart ,
3625+ bw .stmtend ,
3626+ bw .query_text_pre ,
3627+ bw .transaction_id ,
3628+ wait_time_ms =
3629+ MAX (bw .wait_time_ms )
3630+ FROM blocker_waits AS bw
3631+ WHERE bw .sql_handle IS NOT NULL
3632+ GROUP BY
3633+ bw .database_name ,
3634+ bw .sql_handle ,
3635+ bw .stmtstart ,
3636+ bw .stmtend ,
3637+ bw .query_text_pre ,
3638+ bw .transaction_id
3639+ )
3640+ INSERT
3641+ #block_findings
3642+ (
3643+ check_id,
3644+ database_name ,
3645+ object_name ,
3646+ finding_group,
3647+ finding,
3648+ sort_order
3649+ )
3650+ SELECT
3651+ check_id =
3652+ 9 ,
3653+ bpv .database_name ,
3654+ object_name =
3655+ LEFT
3656+ (
3657+ REPLACE
3658+ (
3659+ REPLACE
3660+ (
3661+ ISNULL
3662+ (
3663+ MAX (bpv .query_text_pre ),
3664+ N ' [Unknown]'
3665+ ),
3666+ NCHAR (13 ),
3667+ N ' '
3668+ ),
3669+ NCHAR (10 ),
3670+ N ' '
3671+ ),
3672+ 200
3673+ ),
3674+ finding_group =
3675+ N ' Top Blocking Query' ,
3676+ finding =
3677+ N ' This query caused ' +
3678+ CONVERT
3679+ (
3680+ nvarchar (30 ),
3681+ (
3682+ SUM
3683+ (
3684+ CONVERT
3685+ (
3686+ bigint ,
3687+ bpv .wait_time_ms
3688+ )
3689+ ) / 1000 / 86400
3690+ )
3691+ ) +
3692+ N ' ' +
3693+ CONVERT
3694+ (
3695+ nvarchar (30 ),
3696+ DATEADD
3697+ (
3698+ SECOND,
3699+ (
3700+ SUM
3701+ (
3702+ CONVERT
3703+ (
3704+ bigint ,
3705+ bpv .wait_time_ms
3706+ )
3707+ ) / 1000 % 86400
3708+ ),
3709+ ' 19000101'
3710+ ),
3711+ 14
3712+ ) +
3713+ N ' of blocking wait time (' +
3714+ ISNULL
3715+ (
3716+ CONVERT
3717+ (
3718+ nvarchar (10 ),
3719+ CONVERT
3720+ (
3721+ decimal (5 , 1 ),
3722+ 100 .0 *
3723+ SUM
3724+ (
3725+ CONVERT
3726+ (
3727+ bigint ,
3728+ bpv .wait_time_ms
3729+ )
3730+ ) /
3731+ NULLIF
3732+ (
3733+ SUM
3734+ (
3735+ SUM
3736+ (
3737+ CONVERT
3738+ (
3739+ bigint ,
3740+ bpv .wait_time_ms
3741+ )
3742+ )
3743+ ) OVER (),
3744+ 0
3745+ )
3746+ )
3747+ ),
3748+ N ' 0.0'
3749+ ) +
3750+ N ' % of total) across ' +
3751+ CONVERT
3752+ (
3753+ nvarchar (20 ),
3754+ COUNT_BIG (DISTINCT bpv .transaction_id )
3755+ ) +
3756+ N ' blocked sessions.' ,
3757+ sort_order =
3758+ ROW_NUMBER () OVER
3759+ (
3760+ ORDER BY
3761+ SUM
3762+ (
3763+ CONVERT
3764+ (
3765+ bigint ,
3766+ bpv .wait_time_ms
3767+ )
3768+ ) DESC
3769+ )
3770+ FROM blocker_per_victim AS bpv
3771+ GROUP BY
3772+ bpv .database_name ,
3773+ bpv .sql_handle ,
3774+ bpv .stmtstart ,
3775+ bpv .stmtend
3776+ HAVING
3777+ SUM (CONVERT (bigint , bpv .wait_time_ms )) * 10 >=
3778+ (
3779+ SELECT
3780+ SUM (CONVERT (bigint , bpv2 .wait_time_ms ))
3781+ FROM blocker_per_victim AS bpv2
3782+ )
3783+ OPTION (RECOMPILE );
3784+
35583785 IF @debug = 1
35593786 BEGIN
35603787 RAISERROR (' Inserting #block_findings, check_id 1000' , 0 , 1 ) WITH NOWAIT ;
0 commit comments