3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如其他人所說(shuō),您可以使用SQL事件探查器,但您也可以通過(guò)sp_trace_ *系統(tǒng)存儲(chǔ)過(guò)程利用它的功能。例如,這個(gè)SQL片段(至少2000年;我認(rèn)為對(duì)于SQL 2008是相同的,但你必須仔細(xì)檢查)所有查詢的catch RPC:Completed和SQL:BatchCompleted事件需要超過(guò)10秒才能運(yùn)行,并將輸出保存到您可以在以后在SQL事件探查器中打開(kāi)的跟蹤文件:
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
您可以在聯(lián)機(jī)叢書(shū)中找到每個(gè)跟蹤事件,列等的ID; 只搜索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'是跟蹤ID(由sp_trace_create報(bào)告,第一個(gè)腳本在上面啟動(dòng))。
您可以檢查以查看正在運(yùn)行的跟蹤:
select * from ::fn_trace_getinfo(default)
我唯一要注意的是 - 我不知道這會(huì)給你的系統(tǒng)增加多少負(fù)載; 它會(huì)添加一些,但“some”的大小可能取決于服務(wù)器的繁忙程度。
- 3 回答
- 0 關(guān)注
- 4072 瀏覽
添加回答
舉報(bào)