TL; DR-SQL Azureでライブプロシージャコール(パラメーター名/値を含む)をキャプチャして、以下に示すSQLプロファイラーの出力を複製することは可能ですか?または-これを実現するより良い方法はありますか?
歴史的に、私のWebアプリケーションのパフォーマンスが悪いとき、SQL Server Profilerを使用してWebアプリからの呼び出しをキャプチャし、実行されたストアドプロシージャとそのパラメーターを確認しました。次に、それらをSSMSにコピーして貼り付け、実行プランを使用して、パフォーマンスが向上するまで手順を変更しました。
今、SQL Azureをテストしているときに、SQL Azureでプロファイラーを使用する方法を尋ねる人がたくさんいるのを見て、できないと言われています(おそらく将来は使われなくなります)。 (オンラインの多くの質問はかなり古いので)それはもう真実ではないかもしれませんが、上の質問は残っています。
私は、Azure Performance Insightをテストしましたが、概要がよく、探しているものを完全にはキャプチャできません。
SQL Server Management Studio XEvent Profiler を使用できます。また、Azure Data StudioがクラウドおよびオンプレミスからのXEventの表示をサポートしているのにSSOSがリングバッファーターゲットを使用していることも確認できます。
マイクロソフトは、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データベースで拡張イベントの使用を開始するため。