首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 系統追蹤函數 fn_trace_gettable 完整解析:讀取 .trc 檔案、滾動檔案處理、效能分析實戰

     編輯:關於SqlServer

SQL Server 2000 SP3+ 內建系統使用者定義函數 (以 fn_ 開頭,儲於 master),提供追蹤檔案讀取、排序規則查詢等功能。本文深度解析 fn_trace_gettable 語法、參數、滾動檔案處理、效能調校實戰應用。

系統 UDF 呼叫語法 (雙冒號)


SELECT * FROM ::fn_trace_gettable('C:\Traces\MyTrace.trc', DEFAULT);
-- 第二參數 DEFAULT 表示自動讀取所有滾動檔案

不同於一般 UDF:FROM ::fn_Name(...) 不需指定擁有者。

fn_trace_gettable 參數詳解

參數型別說明
@trace_filenvarchar(256)初始追蹤檔完整路徑 (.trc)
@number_filesint要讀取的滾動檔案數:
DEFAULT = 全部
0 = 僅初始檔
n = 初始檔 + n-1 個滾動檔

滾動檔案機制

  • 建立追蹤時可設定 最大檔案大小 (預設 5 MB)
  • 達上限自動產生 MyTrace_1.trc、MyTrace_2.trc...
  • fn_trace_gettable 依序讀取,邏輯上視為單一資料流

實戰應用場景

1. 找出最耗資源的前 20 條查詢


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;

2. 稽核特定使用者的所有 DDL 操作


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;

3. 偵測死鎖圖 (Deadlock Graph)


SELECT TextData
FROM ::fn_trace_gettable('C:\Traces\DeadlockTrace.trc', DEFAULT)
WHERE EventClass = 148;  -- Deadlock Graph (XML 格式)
-- 將 TextData 複製另存為 .xdl 用 Profiler 開啟視覺化分析

4. 統計每小時執行次數與平均 Duration


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;

效能與限制注意事項

  • 大檔案讀取慢:GB 級 .trc 建議先用 ReadTrace.exe (RML Utilities) 轉載入 SQL 表分析
  • 不支援 WHERE 推演:函數內部全表掃描,外層 WHERE 只能過濾已讀取資料列
  • 並發讀取:多連線同時讀取同追蹤檔可能造成磁碟爭用
  • SQL 2005+ 替代方案: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()列出叢集共用磁碟
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved