2009-08-11 8 views
0

日常的に実行されるSP(SQL Server 2005)でスケジュールされたジョブがあります。最近、私は頻繁にこのSPのデッドロック問題に遭遇します。 (と成長を維持)SQL Server 2005 SPデッドロックの問題

Message 
Executed as user: dbo. Transaction (Process ID 56) was deadlocked on thread | 
communication buffer resources with another process and has been chosen as the deadlock 
victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205). The step failed. 

SPはいくつかのテーブルにはいくつかの間入社ビューは、そのうちの一つは、データの数百万行を持つ大きなサイズのデータ​​テーブルで使用しています。ここではエラーメッセージです。私は、テーブルに対する任意のジョブまたはクエリがSPにテーブルにアクセス不能になるかどうかわからないのですか?私はqueryを使って、オンラインになっている人物を調べるつもりです。その時間中にSQLサーバー上にクエリや人物が公開される可能性があります。

似たような問題があるか、これがSQL 2005の既知の問題であるかわかりませんか?デッドロックを回避するために、私のSPやSQLサーバーで行うべき他の方法はありますか?

+0

プロファイラでデッドロックグラフをトレースして、始めてください。 –

答えて

1

SQL Server Profilerを使用して、実行中のすべてのクエリを追跡します。私は出力をSQL Serverに入れました。これは、どのテーブルやテーブルにアクセスしているのかを理解するのに役立ちます。あなたの発見を投稿すると、私たちはそれを手伝うことができます。

+0

非常に興味深い。 SQL Serverのプロファイルを使用することによって、例えば現在実行中のSPを監視することができます。しかし、私の問題は予期せぬことに起こります。 MS Server Studioのクエリから手動で実行するとデッドロックの問題は発生しません。履歴の失敗に関するトレース情報を取得できますか? –

+0

を実行すると、プロファイラを実行したままにすることができます。 imp:プロファイラはリソースの集中です。あなたがキャプチャしたものには注意してください。 –

1

デッドロックは、2つのトランザクションがそれぞれいくつかのリソースを保持していて、もう一方のリソースにもリソースが必要な場合です。それらは完全に排除することはできませんが、それらを緩和するために多くのことを行うことができます。 Remus氏とRaj氏はProfilerでより多くの情報を取得することをお勧めします。私はこれもお勧めします。クエリを一般的に最適化します。ここにあなたを得るのを助けるMSDNの記事があります: "Minimizing Deadlocks"。

+0

良い提案。しかし、私の現在のSPはうまく設計されておらず、多くのネストされたビューと結合を持っているので、私はそれを実行するとオーバーヒャミング情報を取得することを前提にしています。現時点で誰がSQLサーバ上にいるのかを知るための私のアプローチが、関連性のある短い情報を明らかにするであろうか? –

+0

@David Chu:あなたはあなたの仕事にかなりの仕事をしているように見えます。あなたはクエリ/クエリを微調整する必要があり、デッドロックを把握する必要があります。 –

関連する問題