SQL Server Profiler 2008からCSVのようなファイルに出力をダンプする方法
-
27-09-2019 - |
質問
私はストアドプロシージャをデバッグしていますが、現在、どの順序で実行されたか、どのパラメーターが実行されたかとは対照的に、どのパラメーターが忍び込んでその間にスニークして減速を引き起こすかに興味があります。
それで、私は数分分のトレースをキャプチャしました。問題は、あまりにも多くのものがあり、私はそれを絞り込む必要があることです。私が行った場合 File -> Save As
, 、次のオプションを取得します。
- トレースファイル...
- トレーステンプレート...
- トレーステーブル...
- XMLファイルをトレース...
- リプレイ用のXMLファイルをトレース...
現在、これらはまともなオプションですが、私が本当に欲しいのはCSVなどの表形式です。 SPトレースのコンマは、おそらくCSV形式を台無しにするだろうと思います。私は喜んで他の何かを使用します ||
区切り文字として。
表形式ができたら、それを使用してろ過できます grep
, など、Pythonで簡単に処理して、必要なものを正確に確認できます。スクリプトでXMLファイルを解析し始めましたが、トレースに時間がかかりすぎることに気づきました XML
ファイル形式(使用していません lxml
以前のライブラリ)。
だから...簡単な方法はありますか?少なくともコピーしてどういうわけかコピーできますか?
解決
トレーステーブルに保存する場合。 SQL Serverのテーブルにデータを取得できます。これにより、ハートコンテンツに操作できます。それでも必要に応じて、CSVにダンプアウトすることを含む。テキストデータ列はテーブルに完全に表されています。
選択した場合 保存する → トレーステーブル. 。テーブルの名前とデータベースの名前が求められます。データベースのスクラッチでProfilertempと呼ばれるとしましょう。
それらを入力します。使用してテーブルを照会できます
select * from scratch.dbo.ProfilerTemp
テーブルのトレースウィンドウにすべてが表示されます。ストアドプロシージャだけをフィルター処理しなかった場合、選択しているだけで必要です
Select textdata from [Scratch].[dbo].[ProfilerTemp]
where eventclass = 10
And textdata like 'exec %'
and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'
これにより、非プロシージャコールと接続のリセットがあります。あなたがやろうとしていることに応じて、より多くのフィルターを追加する必要があるかもしれません。
これをテキストファイルとして表示したい場合。クエリを選択します - 結果をファイルして実行します。クエリを実行します。これにより、ファイル名がプロンプトされ、テキストファイルとしてパラメーターテキストが表示されます。
他のヒント
TL; DR:テキストエディターにコピーし、手動で準備してから、Excelに貼り付けます。
私はSQL Serverの経験がほとんどないので、これが他の人に役立つかどうかはわかりませんが、それは私のためにしました。
- SQL Server Profilerで目的の行を選択します。コピーするCtrl + C。
- 正規表現検索を行うことができるプレーンテキストエディターに貼り付けて、交換します(例:私の場合はNotepad ++など)。
- 正規表現交換
(N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?
と$1 $4 $6
- これにより、SQLスクリプトからすべての新しいラインがクリアされます。
- 結果が見つからなくなるまで「すべてを交換」し続けます。
- 正規表現交換
(Batch(Starting|Completed)[^\\]*?)\r\n
と$1
- これにより、より多くのSQLのものからNewlinesがクリアされます。繰り返しますが、結果がないまで交換し続けてください。
- 正規表現交換
\r\nset
とset
- これにより、監査ログインスクリプトからすべての新しいラインがクリアされます
- あなたはもっと交換する必要があるかもしれません、あなたはアイデアを得るでしょう。
- 「テキストインポートウィザード」を使用してExcelに貼り付けます。デリミネーターとしてタブを使用します。
- 最初の列で並べ替えて、役に立たない行を削除します(私の場合は「監査ログイン」など)。また、いくつかのデータを列に手動で移動する必要がある場合があります(私の場合の「EntityFramework」データなど)
分析する必要があるデッドロックトレースイベントを含むSQLプロファイラートレースファイルがたくさんありました。最終的にそれらをSQLプロファイラーを使用して単一のXMLファイルに変換し、そのXMLファイルをPythonで読み取り、 lxml
と pandas
ライブラリ。
データがパンダで終わると Dataframe
, 、CSV、Excel、...またはPythonで簡単に分析することができます(パンダに精通している場合)。
スクリプトはaとして利用可能です 要旨. 。 Deadlock Trace Files専用に書かれています。他のトレースはありませんでした。言い換えれば、目的を果たすために少し調整する必要があるかもしれません。 XMLファイルが大きい(数百MB)かどうか心配しないでください。スクリプトは使用します iterparse()
, 、これは、ファイルがメモリに読み取られず、関連する要素のみがキャプチャされることを意味します。例: xdl
CAのファイル。 220MBは13秒未満で解析されました。
トレースファイルをXMLとして保存する(xdl
拡大):
必ずオプションを選択してください 単一のファイルのすべてのイベント.