現象
Microsoft SQL Server Compact 3.5 では、次のシナリオを検討してください。
-
直列化分離の2つのトランザクションがあります。
-
どちらのトランザクションも、TABLOCK ロックヒントまたは XLOCK ロッキングヒントを含む同じテーブルに対して DML 操作 (query/DML) を実行しようとします。
このシナリオでは、デッドロックが発生します。
原因
この問題は、両方のトランザクションが XLOCK で別のトランザクションを待機しているために発生します。 クエリがコンパイルされると、どちらのトランザクションも、テーブルの共有ロックを取得した後、シリアル化可能な分離のロックを保持します。 両方のトランザクションで、XLOCK ロックヒントが含まれている同じテーブルに対して execute というクエリを実行しようとすると、両方のトランザクションが XLOCK に対してもう1つ待機します。 そのため、デッドロックが発生します。注:この問題は、両方のトランザクションで、TABLOCK ロックヒントを含む同じテーブルに対して DML 操作が実行されている場合にも発生します。
解決方法
SQL Server Compact 3.5 Service Pack 2
この問題の修正プログラムは、累積的な更新プログラム2で最初にリリースされました。 SQL Server 2008 R2 用の累積的な更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2289547 SQL Server Compact 3.5 Service Pack 2 の累積更新プログラム2
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細情報
デッドロックの詳細については、次の Microsoft 開発者ネットワーク (MSDN) web サイトを参照してください。
検出DML の詳細については、次の MSDN web サイトを参照してください。
DMLソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明