現在オフラインです。再接続するためにインターネットの接続を待っています

[FIX] ロック所有者の CXPACKET 待ちで検出されないデッドロック

この記事は、以前は次の ID で公開されていました: JP293232
現象
並列クエリで、ロックの所有者の EC (実行コンテキスト) が CXPACKET の待ち状態になっているときに、検出されないデッドロックが発生することがあります。

デッドロックの発生には、2 つの spid があること、およびそれぞれの spid が並列クエリを実行していることが条件となります。

sysprocesses の出力を見ると、(単一の spid の代わりに動作している) 複数の EC が示され、一部はロックが解放されるまで待機していて、それ以外は CXPACKET の待ち状態になっていることがわかります。

通常、どちらの spid にも、標準的なロック待ちのデッドロックの原因となる直接的な EC の相互関係はありません。ロック待ち状態にあるそれぞれの EC は、CXPACKET リソースの解放を待っている所有者によってブロックされます。syslockinfo システム テーブルのクエリから収集される情報を使用して、この状態を確認することができます。

SQL Server でこの問題が発生しているかどうかを判断するには、以下の手順を実行します。
  1. sysprocesses システム テーブルに "SELECT *" クエリを実行した後、syslockinfo システム テーブルに "SELECT *" クエリを実行します。
  2. ロックの解放を待っているブロック状態の EC を探します。
  3. 出力を検索して、そのロックを所有している EC を調べます。
  4. ロックを所有している EC が CXPACKET の待ち状態になっているかどうかを確認します。
  5. デッドロックになっている疑いがある 2 つの spid の EC すべてに対して、手順 1. ~ 4. を繰り返し実行します。
この状況では、ブロック状態のロック所有者すべてが CXPACKET の待ち状態になります。
解決方法
この問題を解決するには、SQL Server 2000 の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
290211 最新の SQL Server 2000 Service Pack の入手方法

修正プログラム

修正プログラム (英語版) の属性は次のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。
   ファイル名     プラットフォーム   --------------------------   s80263i.exe  INTEL				
: ファイルの依存関係のため、上記のファイルを含む最新の修正プログラムや機能にその他のファイルが含まれる場合もあります。
回避策
デッドロック状態を解決するには、次のいずれかを使用します。
  • クエリのタイムアウト

    または

  • Transact-SQL の KILL コマンド
状況
マイクロソフトでは、この問題を SQL Server 2000 の問題として認識しています。この問題は、SQL Server 2000 Service Pack 1 で最初に修正されました。
プロパティ

文書番号:293232 - 最終更新日: 06/16/2006 02:50:20 - リビジョン: 3.1

  • Microsoft SQL Server 2000 Standard Edition
  • kbbug kbfix kbqfe kbsqlserv2000sp1fix KB293232
フィードバック