Как уже отмечали другие, вы можете использовать SQL Profiler, но вы также можете использовать его функциональность с помощью системных хранимых процедур sp_trace_ *. Например, этот фрагмент кода SQL (по крайней мере, в 2000 году; я думаю, что он аналогичен SQL 2008, но вам придется перепроверять) перехватывает события RPC:Completed
и SQL:BatchCompleted
для всех запросов, выполнение которых занимает более 10 секунд и сохраните вывод в файл трассировки, который вы сможете открыть в профилировщике SQL позже:
DECLARE @TraceID INT
DECLARE @ON BIT
DECLARE @RetVal INT
SET @ON = 1
exec @RetVal = sp_trace_create @TraceID OUTPUT, 2, N'Y:\TraceFile.trc'
print 'This trace is Trace ID = ' + CAST(@TraceID AS NVARCHAR)
print 'Return value = ' + CAST(@RetVal AS NVARCHAR)
-- 10 = RPC:Completed
exec sp_trace_setevent @TraceID, 10, 1, @ON -- Textdata
exec sp_trace_setevent @TraceID, 10, 3, @ON -- DatabaseID
exec sp_trace_setevent @TraceID, 10, 12, @ON -- SPID
exec sp_trace_setevent @TraceID, 10, 13, @ON -- Duration
exec sp_trace_setevent @TraceID, 10, 14, @ON -- StartTime
exec sp_trace_setevent @TraceID, 10, 15, @ON -- EndTime
-- 12 = SQL:BatchCompleted
exec sp_trace_setevent @TraceID, 12, 1, @ON -- Textdata
exec sp_trace_setevent @TraceID, 12, 3, @ON -- DatabaseID
exec sp_trace_setevent @TraceID, 12, 12, @ON -- SPID
exec sp_trace_setevent @TraceID, 12, 13, @ON -- Duration
exec sp_trace_setevent @TraceID, 12, 14, @ON -- StartTime
exec sp_trace_setevent @TraceID, 12, 15, @ON -- EndTime
-- Filter for duration [column 13] greater than [operation 2] 10 seconds (= 10,000ms)
declare @duration bigint
set @duration = 10000
exec sp_trace_setfilter @TraceID, 13, 0, 2, @duration
Вы можете найти идентификатор для каждого события трассировки, столбцов и т. Д. В Books Online; просто найдите sp_trace_create , sp_trace_setevent и sp_trace_setfiler sprocs. Затем вы можете управлять трассировкой следующим образом:
exec sp_trace_setstatus 15, 0 -- Stop the trace
exec sp_trace_setstatus 15, 1 -- Start the trace
exec sp_trace_setstatus 15, 2 -- Close the trace file and delete the trace settings
... где '15' - это идентификатор трассы (как сообщается в sp_trace_create, который первый сценарий запускает выше).
Вы можете проверить, какие трассы выполняются:
select * from ::fn_trace_getinfo(default)
Единственное, что я скажу с осторожностью - я не знаю, какую нагрузку это окажет на вашу систему; он добавит некоторые, но насколько велико это «некоторые», вероятно, зависит от того, насколько занят ваш сервер.