Skip to content

Commit ff46dc7

Browse files
Merge pull request #761 from erikdarlingdata/dev
Merge dev to main: top blocking query finding
2 parents cbbc26f + 618d798 commit ff46dc7

1 file changed

Lines changed: 227 additions & 0 deletions

File tree

sp_HumanEvents/sp_HumanEventsBlockViewer.sql

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

Comments
 (0)