【SQLServer トレースファイル(.trc)】プロファイラで開かずにクエリエディタで見る方法

trc-nothing-profiler
スポンサーリンク

どうも、あおです。

 

 

SQLServerのトレースファイルをいちいちプロファイラで開かずに、

クエリエディタで見る場合の方法。(複数ファイルを見たい場合に便利。)

 

 

 

先に結果がこちら。見やすくする為など、色々編集してます。

trc-nothing-profiler

 

コード

WITH w1 AS(
SELECT EventClass,CAST(TextData AS VARCHAR(MAX)) AS TextData,ApplicationName,LoginName,SPID,StartTime,ServerName FROM sys.fn_trace_gettable(N'C:\Work\trc\20231010.trc',1) WHERE EventClass IN ('65533','65534')
UNION SELECT EventClass,CAST(TextData AS VARCHAR(MAX)) AS TextData,ApplicationName,LoginName,SPID,StartTime,ServerName FROM sys.fn_trace_gettable(N'C:\Work\trc\20231014.trc',1) WHERE EventClass IN ('65533','65534')
UNION SELECT EventClass,CAST(TextData AS VARCHAR(MAX)) AS TextData,ApplicationName,LoginName,SPID,StartTime,ServerName FROM sys.fn_trace_gettable(N'C:\Work\trc\20231015.trc',1) WHERE EventClass IN ('65533','65534')
)
SELECT 
w1.EventClass
,CASE w1.EventClass WHEN '65534' THEN '処理開始'
                    WHEN '65533' THEN '処理終了' END AS EventClassName
,w1.TextData
,w1.ApplicationName
,w1.LoginName
,w1.SPID
,w1.StartTime
,w1.ServerName
FROM w1
ORDER BY w1.StartTime

 

 

解説

1.「TextData」はCASTで型変換しないと、UNIONの際にエラーになる為、

変換しています。

 

2.「fn_trace_gettable」でトレースファイルの場所を指定する際、

デスクトップをかいするとエラーになったので、Cドライブ下に専用の

フォルダを作成して、そこに保管するようにしました。

 

3.WHERE EventClass IN (‘65533′,’65534’)

で指定しているのは、今回、処理開始と処理終了のレコードを

取得したい為。取得したいEventClassが異なる場合は変更してください。

 

4.WITHで一旦すべてのトレースファイルの指定した内容を

UNIONで全て取得して、さらに並べ替えする為、再度取得しています。

 

5.EventClassのIDだけではわかりにくい為、

一応日本語名も「EventClassName」として追加しています。

 

 

補足:2~4行目のSELECT、UNIONの文は、EXCEL関数で取得するように

しておけば、ファイル数が多い場合に楽です。

 

例として、以下では、B列にファイル名を貼付け、D列のExcel関数で

SQLを組み立てています。

trc-nothing-profiler-1

 

 

Excel関数(セル:D2)

="SELECT EventClass,CAST(TextData AS VARCHAR(MAX)) AS TextData,ApplicationName,LoginName,SPID,StartTime,ServerName FROM sys.fn_trace_gettable(N'C:\Work\trc\" & B2 &"',1) WHERE EventClass IN ('65533','65534')"

 

 

Excel関数(セル:D3以降。一旦D3セルに貼付けて、ドラッグで必要分追加。)

="UNION SELECT EventClass,CAST(TextData AS VARCHAR(MAX)) AS TextData,ApplicationName,LoginName,SPID,StartTime,ServerName FROM sys.fn_trace_gettable(N'C:\Work\trc\" & B3 &"',1) WHERE EventClass IN ('65533','65534')"

 

 

 

これで必要な項目をファイル数ぶん一度に見れるので、

プロファイラとはおさらば。