44

私はストアド プロシージャをデバッグしています。現在、何がどの順序で実行され、どのパラメーターがどのように実行されたかに関心があります。実行速度とその間に何が潜入してスローダウンを引き起こす可能性があるかではありません。

そのため、数分間分のトレースをキャプチャしました。問題は、物が多すぎることです。それを絞り込む必要があります。するとFile -> Save As、次のオプションが得られます。

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

これらは適切なオプションですが、私が本当に必要としているのは、CSV などの表形式です。SP トレースのコンマは、おそらく CSV 形式を台無しにするだろうと思います。||区切り記号など、他のものを喜んで使用します。

表形式を取得したらgrep、 などを使用してフィルター処理し、Python で簡単に処理して、必要なものを正確に表示できます。XMLスクリプトを使用して XML ファイルの解析を開始しましたが、トレースファイル形式に多くの時間を費やしていることに気付きました(これlxmlまでライブラリを使用したことがありませんでした)。

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

4

4 に答える 4

70

トレース テーブルに保存する場合。SQL Server のテーブル内のデータを取得して、心ゆくまで操作することができます。それでも必要な場合は、CSV にダンプすることも含まれます。テキスト データ列はテーブルに完全に表示されます。


SaveTrace Tableを選択した場合。テーブルとデータベースの名前を入力するよう求められます。データベース スクラッチでこれを 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'

これにより、非プロシージャ コールと接続のリセットが除外されます。実行しようとしている内容によっては、さらにフィルターを追加する必要がある場合があります。

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

于 2010-12-10T15:04:38.257 に答える
3

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正規表現を次のものに置き換えますset
    • これにより、Audit Login スクリプトからすべての改行がクリアされます
  • もっと交換する必要があるかもしれませんが、アイデアが得られます。
  • 「テキスト インポート ウィザード」を使用して Excel に貼り付けます。タブを区切り記号として使用します。
  • 最初の列で並べ替え、役に立たない行を削除します (たとえば、私の場合は「監査ログイン」)。一部のデータを列に手動で移動する必要がある場合もあります (例: 私の場合は「EntityFramework」データ)。
于 2016-10-14T07:07:19.057 に答える
2

これを試して:

  1. SSMS を開く
  2. 走る select * from fn_trace_gettable('D:\abc.trc',default)
  3. 右クリックしてヘッダー付きで選択
  4. エクセルに貼り付け
于 2020-10-01T11:44:02.990 に答える
0

分析が必要なデッドロック トレース イベントを含む SQL プロファイラー トレース ファイルが多数ありました。lxml最終的に、SQL プロファイラーを使用してそれらを 1 つの XML ファイルに変換し、ライブラリとライブラリを使用して Python でその XML ファイルを読み取りましたpandas

データは最終的に pandasDataframeになるので、CSV、Excel などに簡単に変換したり、Python で分析したりできます (pandas に精通している場合)。

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

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

エキス

オプションall events in a single fileを必ず選択してください。

保存

于 2016-03-31T09:28:31.070 に答える