

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 SQL Server 資料庫執行個體上執行伺服器端追蹤
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.ServerSide"></a>

編寫指令碼來建立伺服器端追蹤的操作可能很複雜，並且不在此文件的範圍。此小節包含您可以用作範例的範例指令碼。利用用戶端追蹤時，目標是要建立您可以使用 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);
```