ストアドプロシージャをデバッグしています。現在、実行速度とは対照的に、何がどの順序で、どのパラメーターが実行されているのか、何が間に潜り込んでスローダウンを引き起こすのかについて興味があります。
そこで、数分のトレースをキャプチャしました。問題は、あまりにも多くのものがあり、それを絞り込む必要があるということです。 File -> Save As
を実行すると、次のオプションが表示されます。
さて、これらはまともなオプションですが、私が本当に欲しいのはCSVなどの表形式です。 SPトレース内のカンマはおそらくCSV形式を台無しにするでしょう。区切り文字として||
などの他のものを喜んで使用します。
表形式になったら、grep
などを使用してフィルター処理し、Pythonで簡単に処理して、必要なものを確認できます。解析を開始しました。スクリプトを含むXMLファイルですが、トレースXML
ファイル形式に時間をかけすぎていることがわかりました(以前にlxml
ライブラリを使用したことがない)。
それで...もっと簡単な方法はありますか?少なくとも何らかの方法でExcelにコピーできますか?
トレーステーブルに保存すると、 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の経験がほとんどないため、これが他の人のために機能するかどうかはわかりませんが、私にとってはうまくいきました。
(N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)?
と$1 $4 $6
(Batch(Starting|Completed)[^\\]*?)\r\n
と$1
\r\nset
with set
分析する必要があるデッドロックトレースイベントを含む一連のSQLプロファイラートレースファイルがありました。 SQLプロファイラーを使用してそれらを単一のXMLファイルに変換し、lxml
およびpandas
ライブラリを使用して、そのXMLファイルをPythonで読み取ることになりました。
データは最終的にpandas Dataframe
になるので、CSV、Excelなどに簡単に変換したり、Python =(パンダに慣れている場合)。
スクリプトは Gist として利用できます。他に使用可能なトレースがなかったため、デッドロックトレースファイル用に特別に記述されています。つまり、目的を果たすために少し調整する必要があるかもしれません。 XMLファイルが大きい(数100 MB)場合も心配しないでください。スクリプトは iterparse()
を使用します。つまり、ファイルはメモリに読み込まれず、関連する要素のみがキャプチャされます。例えば。 caのxdl
ファイル220MBは13秒未満で解析されました。
トレースファイルをXML(xdl
拡張子)として保存:
オプション単一のファイル内のすべてのイベントを選択していることを確認してください。