May 17, 2026, 11:40 PM
This commit is contained in:
@@ -0,0 +1,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
|
||||
Reference in New Issue
Block a user