如何將 Profiler Trace 匯入 SQL Server Table 中以便分析與統計

SQL Profiler 雖已提供不錯的篩選功能,但我們也可以將收集到的資料匯入到資料庫來分析

-- 自行建立一個資料庫 ProfilerTraceLog
Use ProfilerTraceLog
/*
--將 Profiler Trace 匯入 SQL Server Table 中以便分析與統計

--下列語法除了將資料匯入到資料表外,同時也會建立一個 IDENTITY 值,以利資料列的識別
USE ProfilerTraceLog
SELECT IDENTITY(int, 1, 1) AS RowNumber, * INTO Demo6
FROM ::fn_trace_gettable('D:\Temp\MAINDB__sp_trace.trc', default)
*/

--可透過將追蹤儲存到資料表並使用 Transact-SQL 來查詢事件資料而找出額外的資訊。
--1. 例如,若要判斷有哪些 SQL:BatchCompleted 事件的等候時間過量,請執行:
SELECT  Top 10 TextData, Duration, CPU,[Reads],[Writes]
FROM    Demo6
WHERE   EventClass = 12 -- SQL:BatchCompleted events
AND     CPU < (.4 * Duration)
Order by Duration Desc

-- 找出最耗費 CPU 的 Top 10
SELECT  Top 100 Statements=(Cast(TextData as nVarchar(500)))
FROM    Demo6
WHERE   EventClass IN (10,12,41,43,45)
AND     CPU > 1000  -- 1 秒
Group By Cast(TextData as nVarchar(500))
Order by Cast(TextData as nVarchar(500))

-- 找出 Duration 最長的 Top 10
SELECT  Top 10 TextData,Duration,CPU,[Reads],[Writes]
FROM    Demo6
WHERE   EventClass IN (10,12,41,43,45)
AND     Duration > 10000  -- 1 秒
AND     Duration IS NOT Null -- 1 秒
Order by Duration Desc

-- 找出最 Disk Read 最高的 Top 10
SELECT  Top 10 TextData,Duration,CPU,[Reads],[Writes]
FROM    Demo6
WHERE   EventClass IN (10,12,41,43,45)
AND     Reads > 1000  -- 1 秒
Order by [Reads],[Writes],CPU,Duration Desc

 

詳細的資料可以參考 SQL Server 2005 線上叢書