web-dev-qa-db-ja.com

SQL Azureでのライブストアドプロシージャコール(クエリプロファイラーによる)のキャプチャ

TL; DR-SQL Azureでライブプロシージャコール(パラメーター名/値を含む)をキャプチャして、以下に示すSQLプロファイラーの出力を複製することは可能ですか?または-これを実現するより良い方法はありますか?

歴史的に、私のWebアプリケーションのパフォーマンスが悪いとき、SQL Server Profilerを使用してWebアプリからの呼び出しをキャプチャし、実行されたストアドプロシージャとそのパラメーターを確認しました。次に、それらをSSMSにコピーして貼り付け、実行プランを使用して、パフォーマンスが向上するまで手順を変更しました。

Profiler capturing live queries

今、SQL Azureをテストしているときに、SQL Azureでプロファイラーを使用する方法を尋ねる人がたくさんいるのを見て、できないと言われています(おそらく将来は使われなくなります)。 (オンラインの多くの質問はかなり古いので)それはもう真実ではないかもしれませんが、上の質問は残っています。

私は、Azure Performance Insightをテストしましたが、概要がよく、探しているものを完全にはキャプチャできません。

1
EvilDr

SQL Server Management Studio XEvent Profiler を使用できます。また、Azure Data StudioがクラウドおよびオンプレミスからのXEventの表示をサポートしているのにSSOSがリングバッファーターゲットを使用していることも確認できます。

2
Alberto Morillo

マイクロソフトは、2008年にTraceの機能の開発を中止しました。現在、すべてが拡張イベントに集中しています。 Azure SQL Databaseについても同様です。拡張イベントは、rpc_completedイベントステートメントのテキストを非常によく似た方法でキャプチャします。

例として、SQlClient.SqlCommandオブジェクトを使用して次のようなストアドプロシージャを実行しているPowerShellスクリプトからrpc_completedイベントをキャプチャしています。

$Sniffcmd = New-Object System.Data.SqlClient.SqlCommand
$Sniffcmd.CommandType = [System.Data.CommandType]'StoredProcedure'
$Sniffcmd.CommandText = "dbo.ProductTransactionHistoryByReference"
$Sniffcmd.Parameters.Add("@ReferenceOrderID",[System.Data.SqlDbType]"Int")
$Sniffcmd.Connection = $SqlConnection

ステートメントに対するrpc_completedイベントアクションの結果の出力は次のとおりです。

ステートメント:exec dbo.ProductTransactionHistoryByReference @ ReferenceOrderID = 68187

これは、トレースを実行している場合に期待することとまったく同じですが、拡張イベントからのものです。 ドキュメントはこちら Azure SQLデータベースで拡張イベントの使用を開始するため。

2
Grant Fritchey