SQL Server: Capture blocking information with Extended Events

The Setup

The blocked process threshold system configuration option must be enabled

EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'blocked process threshold', 15;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO

Create the event session and then start it

/* check to see if the event session exists */
IF EXISTS ( SELECT  1
FROM    sys.server_event_sessions
WHERE   name = 'Capture_BlockedProcessReport' )
DROP EVENT SESSION [Capture_BlockedProcessReport] ON SERVER;
GO

/* create the event session */
CREATE EVENT SESSION [Capture_BlockedProcessReport]
ON SERVER
ADD EVENT sqlserver.blocked_process_report
ADD TARGET package0.event_file(
SET filename=N'C:\ExtendedEvents\Capture_BlockedProcessReport.xel'
)
WITH (MAX_MEMORY=8192 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,
TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF);
GO

/* start the event session */
ALTER EVENT SESSION [Capture_BlockedProcessReport]
ON SERVER
STATE = START;
GO

Viewing the Report

SELECT
event_data.value('(event/@name)[1]', 'varchar(50)') AS event_name,
event_data.query('(event/data[@name="blocked_process"]/value/blocked-process-report)[1]') AS [blocked_process_report]
FROM
(
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file('C:\ExtendedEvents\Capture_BlockedProcessReport*.xel', NULL, NULL, NULL)
) AS sub;
GO

 

Posted in SQL 2012, SQL 2014, SQL 2016, SQL Server, Troubleshooting | Tagged , , | Leave a comment