SQL Server2008プロファイラーのデッドロックを分析しようとしています。問題のあるSQLクエリを見つける方法は知っていますが、収集されたクエリにはパラメータ値が含まれていません。
言い換えれば、私はこのようなものを見ることができます:
DELETE FROM users WHERE id = @id
しかし、私が見たいのはこれです:
DELETE FROM users WHERE id = 12345
プロファイラーで収集する必要のある追加のイベントまたは列がいくつかあると思いますが、どれかわかりません。現在、「TSQL_LOCKS」テンプレートを使用しています。
ヒントをいただければ幸いです。
ありがとう、
アドリアン
免責事項:私は以前に同様の質問をしましたが、それはあまりにも具体的だったと思います。そのため、返信がありませんでした。私はこれで別の試みを始めています。
RPC:Completedイベントが必要だと思います:
プロファイラーには、 RPC:Completed / RPC:Starting イベントのパラメーター値が含まれます。しかし、あなたはすでにあなたにこれを言っている返事を受け取りました。
追加したいのは、デッドロックグラフを分析するために、パラメーターの実行時の値を知る必要がほとんどないということです。まず、「users」がデッドロックに関与している場合、競合がキー上にあると、デッドロックグラフ自体が@idの競合を示します。次に、さらに重要なことは、デッドロックシナリオの場合、関係する正確なキーは無関係です。 ID 123のユーザーを削除するためにデッドロックが発生するのとは異なりますが、ユーザー321を削除してもデッドロックは発生しません。
そもそもSO)で質問することにした場合は、実際のデッドロックグラフを投稿して、コミュニティに見てもらうのが最善だと思います。ここには答えられるものがたくさんあります。デッドロックグラフXMLからのかなりの数の質問。
すべてのチェックボックスがオンになっている次のイベントでトレースを開始します。
SQL: BatchCompleted
SQL: BatchStarting
Deadlock graph
Lock:Deadlock
Lock:Deadlock chain
デッドロックが発生したら、トレースを停止し、デッドロックグラフイベントクラスをクリックします。
これにより、何が問題になっているのかがわかります。
ストアドプロシージャ(現在のように見えます)またはHibernate/NHibernateを使用している場合は、ストアドプロシージャの開始イベント(SP:StmtStarting)とRPC:Startingイベントをオンにする必要がある場合があります。これにより、クエリ後の独自の行にパラメータが表示されます。
何かのようなもの:
SP:StmtStarting DELETEFROMユーザーWHEREid = @id
RPC:exec sp_execute12345を開始しています