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

SQL Profiler 追蹤輸出至資料表後的高效過濾與分析技巧

     編輯:關於SqlServer

為何輸出至資料表

將 SQL Profiler 追蹤輸出至資料表,而非檔案,主要優勢在於**事後可用 T-SQL 查詢靈活過濾、聚合、分析**,比在 Profiler GUI 建立複雜過濾器高效得多。

部署架構建議

  • 最佳:追蹤輸出寫入**另一台 SQL Server** 的資料表,避免追蹤本身的 INSERT 影響目標伺服器效能
  • 次佳:輸出至本機資料表,注意磁碟空間與 INSERT 開銷
  • 備援:輸出至追蹤檔 (.trc),事後 File → Save As → Table 匯入分析

過濾分析實戰範例

-- 1. 找出最耗資源的前 20 條陳述式
SELECT TOP 20 TextData, CPU, Reads, Writes, Duration, SPID, StartTime
FROM TraceTable
ORDER BY (CPU + Reads + Writes) DESC;

-- 2. 特定資料庫的長時間查詢
SELECT * FROM TraceTable
WHERE DatabaseName = 'MyDB' AND Duration > 5000000  -- 5 秒 (微秒)
ORDER BY Duration DESC;

-- 3. 特定登入的所有活動
SELECT * FROM TraceTable
WHERE LoginName = 'app_user' AND EventClass IN (10, 12, 41)  -- RPC:Completed, SQL:BatchCompleted, SP:StmtCompleted
ORDER BY StartTime;

-- 4. 鎖死事件分析
SELECT TextData, SPID, StartTime, EventClass
FROM TraceTable
WHERE EventClass = 59  -- Deadlock Graph
ORDER BY StartTime;

-- 5. 依應用程式名稱分組統計
SELECT ApplicationName, COUNT(*) AS EventCount, AVG(Duration) AS AvgDuration
FROM TraceTable
GROUP BY ApplicationName
ORDER BY EventCount DESC;

大型追蹤檔處理提醒

  • 開啟大型 .trc 檔需數分鐘,**請耐心等待**
  • 持續監控檔案大小 / 資料表磁碟空間,避免寫滿導致追蹤中斷
  • 建議設定追蹤停止條件:最大檔案大小、最大資料列數、最大持續時間

進階技巧:預先建立分析視圖

CREATE VIEW v_Trace_HighCost AS
SELECT TextData, CPU, Reads, Writes, Duration, SPID, LoginName, ApplicationName, StartTime
FROM TraceTable
WHERE Duration > 1000000  -- 1 秒以上
  AND (CPU > 1000 OR Reads > 10000);

後續直接 SELECT * FROM v_Trace_HighCost ORDER BY Duration DESC 即可快速定位問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved