web-dev-qa-db-ja.com

SQL Server Profiler 2008からの出力をCSVのようなファイルにダンプする方法

ストアドプロシージャをデバッグしています。現在、実行速度とは対照的に、何がどの順序で、どのパラメーターが実行されているのか、何が間に潜り込んでスローダウンを引き起こすのかについて興味があります。

そこで、数分のトレースをキャプチャしました。問題は、あまりにも多くのものがあり、それを絞り込む必要があるということです。 File -> Save Asを実行すると、次のオプションが表示されます。

  • トレースファイル...
  • トレーステンプレート...
  • トレーステーブル...
  • XMLファイルをトレース...
  • 再生用のXMLファイルをトレース...

さて、これらはまともなオプションですが、私が本当に欲しいのはCSVなどの表形式です。 SPトレース内のカンマはおそらくCSV形式を台無しにするでしょう。区切り文字として||などの他のものを喜んで使用します。

表形式になったら、grepなどを使用してフィルター処理し、Pythonで簡単に処理して、必要なものを確認できます。解析を開始しました。スクリプトを含むXMLファイルですが、トレースXMLファイル形式に時間をかけすぎていることがわかりました(以前にlxmlライブラリを使用したことがない)。

それで...もっと簡単な方法はありますか?少なくとも何らかの方法でExcelにコピーできますか?

41
Hamish Grubijan

トレーステーブルに保存すると、 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'

これにより、プロシージャ以外の呼び出しと接続リセットが除外されます。何をしようとしているかに応じて、さらにフィルターを追加する必要がある場合があります。

これをテキストファイルとして出力する場合は、クエリを選択-結果をファイルし、クエリを実行します。これにより、ファイル名の入力が求められ、パラメーターテキストがテキストファイルとして表示されます。

65
u07ch

TL; DR:テキストエディターにコピーし、手動で準備してからExcelに貼り付けます。

私はSQL Serverの経験がほとんどないため、これが他の人のために機能するかどうかはわかりませんが、私にとってはうまくいきました。

  • SQL Serverプロファイラで目的の行を選択します。 Ctrl + Cでコピーします。
  • 正規表現の検索と置換が可能なプレーンテキストエディターに貼り付けます(私の場合はNotepad ++など)。
  • 正規表現の置換(N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?$1 $4 $6
    • これにより、SQLスクリプトからすべての改行がクリアされます。
    • 結果がなくなるまで「すべて置換」を繰り返します。
  • 正規表現の置換(Batch(Starting|Completed)[^\\]*?)\r\n$1
    • これにより、より多くのSQLから改行がクリアされます。繰り返しますが、結果がなくなるまで交換を続けます。
  • 正規表現の置換\r\nset with set
    • これにより、監査ログインスクリプトからすべての改行がクリアされます
  • あなたはより多くの交換をする必要があるかもしれません、あなたはアイデアを得ます。
  • 「テキストインポートウィザード」を使用してExcelに貼り付けます。デリミネーターとしてタブを使用します。
  • 最初の列で並べ替え、役に立たない行をすべて削除します(私の場合は「ログインの監査」など)。また、一部のデータを手動で列に移動する必要がある場合もあります(私の場合は「EntityFramework」データなど)。
3
Aaron Campbell

分析する必要があるデッドロックトレースイベントを含む一連のSQLプロファイラートレースファイルがありました。 SQLプロファイラーを使用してそれらを単一のXMLファイルに変換し、lxmlおよびpandasライブラリを使用して、そのXMLファイルをPythonで読み取ることになりました。

データは最終的にpandas Dataframeになるので、CSV、Excelなどに簡単に変換したり、Python =(パンダに慣れている場合)。

スクリプトは Gist として利用できます。他に使用可能なトレースがなかったため、デッドロックトレースファイル用に特別に記述されています。つまり、目的を果たすために少し調整する必要があるかもしれません。 XMLファイルが大きい(数100 MB)場合も心配しないでください。スクリプトは iterparse() を使用します。つまり、ファイルはメモリに読み込まれず、関連する要素のみがキャプチャされます。例えば。 caのxdlファイル220MBは13秒未満で解析されました。

トレースファイルをXML(xdl拡張子)として保存:

Extract

オプション単一のファイル内のすべてのイベントを選択していることを確認してください。

Save

0
ƘɌỈSƬƠƑ