本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 SQL Server 資料庫執行個體上執行伺服器端追蹤
編寫指令碼來建立伺服器端追蹤的操作可能很複雜,並且不在此文件的範圍。此小節包含您可以用作範例的範例指令碼。利用用戶端追蹤時,目標是要建立您可以使用 Database Engine Tuning Advisor 來開啟的工作負載檔案或追蹤資料表。
下列是會開始伺服器端追蹤並將詳細資料擷取至工作負載檔案之縮減的範例指令碼。此追蹤最初是將檔案儲存至 D:\RDSDBDATA\Log 目錄中的 RDSTrace.trc,並且每 100 MB 輪替,因此後續的追蹤檔案名為 RDSTrace_1.trc、RDSTrace_2.trc 等等。
DECLARE @file_name NVARCHAR(245) = 'D:\RDSDBDATA\Log\RDSTrace'; DECLARE @max_file_size BIGINT = 100; DECLARE @on BIT = 1 DECLARE @rc INT DECLARE @traceid INT EXEC @rc = sp_trace_create @traceid OUTPUT, 2, @file_name, @max_file_size IF (@rc = 0) BEGIN EXEC sp_trace_setevent @traceid, 10, 1, @on EXEC sp_trace_setevent @traceid, 10, 2, @on EXEC sp_trace_setevent @traceid, 10, 3, @on . . . EXEC sp_trace_setfilter @traceid, 10, 0, 7, N'SQL Profiler' EXEC sp_trace_setstatus @traceid, 1 END
下列範例是停止追蹤的指令碼。請注意,先前的指令碼建立的追蹤會繼續執行,直到您明確停止追蹤或該程序用完磁碟空間為止。
DECLARE @traceid INT SELECT @traceid = traceid FROM ::fn_trace_getinfo(default) WHERE property = 5 AND value = 1 AND traceid <> 1 IF @traceid IS NOT NULL BEGIN EXEC sp_trace_setstatus @traceid, 0 EXEC sp_trace_setstatus @traceid, 2 END
您可以將伺服器端追蹤結果儲存至資料庫資料表,並透過使用 fn_trace_gettable 函數,將資料庫資料表用作 Tuning Advisor 的工作負載。下列命令會將 D:\rdsdbdata\Log 目錄中名為 RDSTrace.trc 之所有檔案的結果 (包括所有輪替檔案 (像是 RDSTrace_1.trc)) 載入目前資料庫中名為 RDSTrace 的資料表。
SELECT * INTO RDSTrace FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace.trc', default);
若要將特定輪替檔案儲存至資料表,例如 RDSTrace_1.trc 檔案,請指定輪替檔案的名稱並將 1 替換,而非使用預設值做為傳遞至 fn_Trace_gettable 的最後一個參數。
SELECT * INTO RDSTrace_1 FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace_1.trc', 1);