將 SQL Profiler 追蹤輸出至資料表,而非檔案,主要優勢在於**事後可用 T-SQL 查詢靈活過濾、聚合、分析**,比在 Profiler GUI 建立複雜過濾器高效得多。
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;
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 即可快速定位問題。