20

SQLServer2008プロファイラーのデッドロックを分析しようとしています。問題のあるSQLクエリを見つける方法は知っていますが、収集されたクエリにはパラメータ値が含まれていません。

言い換えれば、私はこのようなものを見ることができます:

DELETE FROM users WHERE id = @id

しかし、私が見たいのはこれです:

DELETE FROM users WHERE id = 12345

プロファイラーで収集する必要のある追加のイベントまたは列があると思いますが、どれかわかりません。現在、「TSQL_LOCKS」テンプレートを使用しています。

ヒントをいただければ幸いです。

ありがとう、

エイドリアン

免責事項:私は以前に同様の質問をしましたが、それはあまりにも具体的だったと思います。そのため、返信がありませんでした。私はこれで別の試みを始めています。

4

4 に答える 4

21

RPC:Completedイベントが必要だと思います:

http://msdn.microsoft.com/en-us/library/ms175543.aspx

于 2009-12-23T13:44:00.267 に答える
6

プロファイラーには、RPC:Completed / RPC:Startingイベントのパラメーター値が含まれます。しかし、あなたはすでにあなたにこれを告げる返事を受け取りました。

追加したいのは、デッドロックグラフを分析するために、パラメーターの実行時の値を知る必要がほとんどないということです。まず、「users」がデッドロックに関与している場合、競合がキー上にある場合、デッドロックグラフ自体が@idの競合を示します。第二に、より重要なことに、デッドロックシナリオの場合、関係する正確なキーは無関係です。ID 123のユーザーを削除するためにデッドロックが発生するのとは異なりますが、ユーザー321を削除してもデッドロックは発生しません。

そもそもSOについて質問することにした場合は、実際のデッドロックグラフを投稿して、コミュニティに見てもらうのが最善だと思います。ここには、デッドロックグラフXMLからかなりの数の質問に答えることができるものがたくさんあります。

于 2009-12-23T16:25:21.903 に答える
1

すべてのチェックボックスがオンになっている次のイベントでトレースを開始します。

SQL: BatchCompleted
SQL: BatchStarting
Deadlock graph
Lock:Deadlock
Lock:Deadlock chain

デッドロックが発生したら、トレースを停止し、デッドロックグラフイベントクラスをクリックします。

これにより、何が問題になっているのかがわかります。

于 2009-12-23T14:16:26.413 に答える
1

ストアドプロシージャ(現在のように見えます)またはHibernate / NHibernateを使用している場合は、ストアドプロシージャの開始イベント(SP:StmtStarting)とRPC:Startingイベントをオンにする必要がある場合があります。これにより、クエリ後の独自の行にパラメータが表示されます。

何かのようなもの:

SP:StmtStartingDELETEFROMユーザーWHEREid= @id

RPC:execsp_execute12345を開始しています

于 2009-12-23T15:21:11.997 に答える