Simple Dead Lock Trace
A server trace that captures only deadlock graph events for a fixed window.
The minimal deadlock catcher. This script creates a server-side trace that records nothing but the Lock:Deadlock Chain event - with the deadlock XML, duration, SPID, start time, database and login columns - running for as long as you set at the top (default one hour) or until the file hits its size cap. The trace keeps running in the background; the commented section at the bottom shows how to stop, start or delete it later by trace id.
------------------------------------------------------------------------------------------------------------------------
-- Create a Queue
------------------------------------------------------------------------------------------------------------------------
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @DateTime datetime
set @DateTime = DateAdd(HH, 24, GetDate()) --Run for x Hours.
set @maxfilesize = 1024 --Run untill the file reaches x MB.
--The .trc extension will be appended to the filename automatically.
exec @rc = sp_trace_create @TraceID output, 0, N'D:\TraceFileName', @maxfilesize, @DateTime
if (@rc != 0) goto error
------------------------------------------------------------------------------------------------------------------------
-- Set the events
------------------------------------------------------------------------------------------------------------------------
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 148, 11, @on
exec sp_trace_setevent @TraceID, 148, 51, @on
exec sp_trace_setevent @TraceID, 148, 4, @on
exec sp_trace_setevent @TraceID, 148, 12, @on
exec sp_trace_setevent @TraceID, 148, 14, @on
exec sp_trace_setevent @TraceID, 148, 26, @on
exec sp_trace_setevent @TraceID, 148, 60, @on
exec sp_trace_setevent @TraceID, 148, 64, @on
exec sp_trace_setevent @TraceID, 148, 1, @on
exec sp_trace_setevent @TraceID, 148, 41, @on
------------------------------------------------------------------------------------------------------------------------
-- Set the trace status to start
------------------------------------------------------------------------------------------------------------------------
exec sp_trace_setstatus @TraceID, 1
------------------------------------------------------------------------------------------------------------------------
-- display trace id for future references
------------------------------------------------------------------------------------------------------------------------
select TraceID=@TraceID
goto finish
error:
select ErrorCode=@rc
finish:
go
SELECT * FROM ::fn_trace_getinfo(NULL)
------------------------------------------------------------------------------------------------------------------------
--Control running traces:
------------------------------------------------------------------------------------------------------------------------
--EXEC sp_trace_setstatus @traceid = 3, @status = 0 --Stop
--EXEC sp_trace_setstatus @traceid = 3, @status = 1 --Start
--EXEC sp_trace_setstatus @traceid = 3, @status = 2 --Delete