SQL Server 2000 SP3+ 內建系統使用者定義函數 (以 fn_ 開頭,儲於 master),提供追蹤檔案讀取、排序規則查詢等功能。本文深度解析 fn_trace_gettable 語法、參數、滾動檔案處理、效能調校實戰應用。
SELECT * FROM ::fn_trace_gettable('C:\Traces\MyTrace.trc', DEFAULT);
-- 第二參數 DEFAULT 表示自動讀取所有滾動檔案
不同於一般 UDF:FROM ::fn_Name(...) 不需指定擁有者。
| 參數 | 型別 | 說明 |
|---|---|---|
@trace_file | nvarchar(256) | 初始追蹤檔完整路徑 (.trc) |
@number_files | int | 要讀取的滾動檔案數:DEFAULT = 全部0 = 僅初始檔n = 初始檔 + n-1 個滾動檔 |
MyTrace_1.trc、MyTrace_2.trc...fn_trace_gettable 依序讀取,邏輯上視為單一資料流
SELECT TOP 20
TextData, CPU, Reads, Writes, Duration, SPID, StartTime, EndTime,
DatabaseName, LoginName, ApplicationName
FROM ::fn_trace_gettable('C:\Traces\PerfTrace.trc', DEFAULT)
WHERE EventClass IN (10, 12) -- RPC:Completed, SQL:BatchCompleted
ORDER BY Duration DESC;
SELECT StartTime, TextData, DatabaseName, ObjectName, EventClass
FROM ::fn_trace_gettable('C:\Traces\AuditTrace.trc', DEFAULT)
WHERE LoginName = 'AppUser' AND EventClass IN (46, 47, 48, 164) -- Object:Created/Altered/Dropped, Object:Altered
ORDER BY StartTime DESC;
SELECT TextData
FROM ::fn_trace_gettable('C:\Traces\DeadlockTrace.trc', DEFAULT)
WHERE EventClass = 148; -- Deadlock Graph (XML 格式)
-- 將 TextData 複製另存為 .xdl 用 Profiler 開啟視覺化分析
SELECT
DATEPART(hour, StartTime) AS HourOfDay,
COUNT(*) AS ExecCount,
AVG(Duration) / 1000.0 AS AvgDurationMs
FROM ::fn_trace_gettable('C:\Traces\PerfTrace.trc', DEFAULT)
WHERE EventClass IN (10, 12)
GROUP BY DATEPART(hour, StartTime)
ORDER BY HourOfDay;
ReadTrace.exe (RML Utilities) 轉載入 SQL 表分析sys.fn_trace_gettable (相容)、Extended Events (XEvents) + sys.fn_xe_file_target_read_file (高效能、低負擔、原生檢視器)| 函數 | 用途 |
|---|---|
fn_trace_getinfo(@trace_id) | 取得指定追蹤屬性 (狀態、路徑、大小、事件/欄位/篩選) |
fn_trace_geteventinfo(@trace_id) | 取得追蹤包含的事件與欄位清單 |
fn_trace_getfilterinfo(@trace_id) | 取得追蹤篩選條件 |
fn_helpcollations() | 列出所有支援排序規則 |
fn_servershareddrives() | 列出叢集共用磁碟 |