-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathBlocking Monitoring.sql
More file actions
104 lines (93 loc) · 3.58 KB
/
Blocking Monitoring.sql
File metadata and controls
104 lines (93 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/********************************************************************************************
*** Blocking and deadlock monitor ***
------------------------------------------------
I have prepared this script to monitor blocking sessions with sp_whoisactive,
So first you need tocreate sp_whoisactive stored procedure,
please downad it from the link,
https://github.com/SqlAdmin/AwesomeSQLServer/blob/master/T-SQL%20Scripts/sp_whoisactive.sql
*******************************************************************************************/
-- To get overall info about current sessions
EXEC sp_whoisactive
---------------------------------------
/*** 1. Monitor blocking session ***/
---------------------------------------
EXEC sp_WhoIsActive @find_block_leaders = 1,
@output_column_list = '[dd%][session_id][database_name][login_name] [sql_text][wait_info][blocking_session_id][blocked_session_count]',
@sort_order = '[start_time] ASC';
---------------------------------------
/*** 2. Monitor deadlocking session ***/
---------------------------------------
WITH [Blocking]
AS (SELECT
w.[session_id],
s.[original_login_name],
s.[login_name],
w.[wait_duration_ms],
w.[wait_type],
r.[status],
r.[wait_resource],
w.[resource_description],
s.[program_name],
w.[blocking_session_id],
s.[host_name],
r.[command],
r.[percent_complete],
r.[cpu_time],
r.[total_elapsed_time],
r.[reads],
r.[writes],
r.[logical_reads],
r.[row_count],
q.[text],
q.[dbid],
p.[query_plan],
r.[plan_handle]
FROM [sys].[dm_os_waiting_tasks] w
INNER JOIN [sys].[dm_exec_sessions] s
ON w.[session_id] = s.[session_id]
INNER JOIN [sys].[dm_exec_requests] r
ON s.[session_id] = r.[session_id]
CROSS APPLY [sys].[dm_exec_sql_text](r.[plan_handle]) q
CROSS APPLY [sys].[dm_exec_query_plan](r.[plan_handle]) p
WHERE w.[session_id] > 50
AND w.[wait_type] NOT IN ('DBMIRROR_DBM_EVENT'
, 'ASYNC_NETWORK_IO'))
SELECT
b.[session_id] AS [WaitingSessionID],
b.[blocking_session_id] AS [BlockingSessionID],
b.[login_name] AS [WaitingUserSessionLogin],
s1.[login_name] AS [BlockingUserSessionLogin],
b.[original_login_name] AS [WaitingUserConnectionLogin],
s1.[original_login_name] AS [BlockingSessionConnectionLogin],
b.[wait_duration_ms] AS [WaitDuration],
b.[wait_type] AS [WaitType],
t.[request_mode] AS [WaitRequestMode],
UPPER(b.[status]) AS [WaitingProcessStatus],
UPPER(s1.[status]) AS [BlockingSessionStatus],
b.[wait_resource] AS [WaitResource],
t.[resource_type] AS [WaitResourceType],
t.[resource_database_id] AS [WaitResourceDatabaseID],
DB_NAME(t.[resource_database_id]) AS [WaitResourceDatabaseName],
b.[resource_description] AS [WaitResourceDescription],
b.[program_name] AS [WaitingSessionProgramName],
s1.[program_name] AS [BlockingSessionProgramName],
b.[host_name] AS [WaitingHost],
s1.[host_name] AS [BlockingHost],
b.[command] AS [WaitingCommandType],
b.[text] AS [WaitingCommandText],
b.[row_count] AS [WaitingCommandRowCount],
b.[percent_complete] AS [WaitingCommandPercentComplete],
b.[cpu_time] AS [WaitingCommandCPUTime],
b.[total_elapsed_time] AS [WaitingCommandTotalElapsedTime],
b.[reads] AS [WaitingCommandReads],
b.[writes] AS [WaitingCommandWrites],
b.[logical_reads] AS [WaitingCommandLogicalReads],
b.[query_plan] AS [WaitingCommandQueryPlan],
b.[plan_handle] AS [WaitingCommandPlanHandle]
FROM [Blocking] b
INNER JOIN [sys].[dm_exec_sessions] s1
ON b.[blocking_session_id] = s1.[session_id]
INNER JOIN [sys].[dm_tran_locks] t
ON t.[request_session_id] = b.[session_id]
WHERE t.[request_status] = 'WAIT'
GO