透過 SQL Profiler 產生的腳本可自動化啟動儲存程序追蹤。以下為關鍵步驟解析:
DECLARE @rc INT, @TraceID INT, @maxfilesize BIGINT;
SET @maxfilesize = 5; -- 最大檔案大小 (MB)
EXEC @rc = sp_trace_create @TraceID OUTPUT, 0, N'c:\test', @maxfilesize, NULL;
IF (@rc != 0) GOTO error;
事件 ID 12 為 SQL:BatchStarting,欄位 1、12、14 分別對應 TextData、SPID、StartTime:
DECLARE @on BIT; SET @on = 1;
EXEC sp_trace_setevent @TraceID, 12, 1, @on;
EXEC sp_trace_setevent @TraceID, 12, 12, @on;
EXEC sp_trace_setevent @TraceID, 12, 14, @on;
-- 過濾應用程式名稱
EXEC sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Profiler';
-- 過濾 CPU 時間 > 100ms
SET @intfilter = 100;
EXEC sp_trace_setfilter @TraceID, 22, 0, 4, @intfilter;
-- 過濾資料庫 ID = 1
SET @intfilter = 1;
EXEC sp_trace_setfilter @TraceID, 23, 1, 0, @intfilter;
-- 過濾資料庫名稱
EXEC sp_trace_setfilter @TraceID, 35, 1, 6, N'pubs';
EXEC sp_trace_setstatus @TraceID, 1; -- 1 = 啟動
SELECT TraceID = @TraceID; -- 記錄 TraceID 供後續停止使用
.sql 檔,修改 sp_trace_create 的檔案路徑參數。停止追蹤時,資料才會完整寫入追蹤檔案,中間過程不可即時查看。
SELECT * FROM ::fn_trace_getinfo(0);
-- 停止 (可稍後重新啟用)
EXEC sp_trace_setstatus @traceid = 1, @status = 0;
-- 關閉並釋放資源
EXEC sp_trace_setstatus @traceid = 1, @status = 2;