使用 SQL Profiler 產生追蹤腳本,再以腳本方式啟動/管理 Server 端追蹤,適用於生產環境無人值守收集效能數據。
/*******************************************/
/* Created by: SQL Profiler */
/* Date: 2004/06/19 16:50:05 */
/*******************************************/
DECLARE @rc INT, @TraceID INT, @maxfilesize BIGINT;
SET @maxfilesize = 5; -- MB
-- 請將 InsertFileNameHere 替換為實際路徑 (如 C:\MyFolder\MyTrace),.trc 會自動附加
EXEC @rc = sp_trace_create @TraceID OUTPUT, 0, N'C:\test', @maxfilesize, NULL;
IF (@rc != 0) GOTO error;
DECLARE @on BIT; SET @on = 1;
-- 設定事件 (12=SP:StmtCompleted, 欄位 1=TextData, 12=SPID, 14=StartTime)
EXEC sp_trace_setevent @TraceID, 12, 1, @on;
EXEC sp_trace_setevent @TraceID, 12, 12, @on;
EXEC sp_trace_setevent @TraceID, 12, 14, @on;
-- 設定過濾器
DECLARE @intfilter INT, @bigintfilter BIGINT;
EXEC sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Profiler'; -- 排除 Profiler 自身
SET @intfilter = 100; -- CPU > 100ms
EXEC sp_trace_setfilter @TraceID, 22, 0, 4, @intfilter;
SET @intfilter = 1; -- 僅資料庫 ID 1
EXEC sp_trace_setfilter @TraceID, 23, 1, 0, @intfilter;
EXEC sp_trace_setfilter @TraceID, 35, 1, 6, N'pubs'; -- 僅 pubs 資料庫
-- 啟動追蹤
EXEC sp_trace_setstatus @TraceID, 1;
SELECT TraceID = @TraceID; -- 記錄 TraceID 供後續管理
GOTO finish;
error: SELECT ErrorCode = @rc;
finish: GO
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 (釋放資源)。sp_trace_create 設定 @stoptime 自動停止。