アプリケーションでは、C#コードからトランザクション内の15個のテーブルにレコードを挿入します。 これは、各テーブルに対して1つのinsertステートメントを作成し、すべてを1つのクエリに追加し、 'ExecuteNonQuery'を使用してテーブルにレコードを挿入します。なぜなら、挿入がすべてのテーブルで行われ、矛盾したデータを必要としないために、トランザクションでそれを使用しているからです。テーブルにデータを挿入中にテーブルロックを回避する方法
この機能はサービスで作成され、複数のサービス(同じサービス、異なるインストール)が同時にこのタスク(テーブルにデータを挿入)を実行します。 これらのサービスは、テーブルにまったく異なる行を挿入しており、決して依存しません。
しかし、これらのサービスを実行すると、これらの挿入ステートメントにデッドロックが発生しています。
コードは次のようである:
- オープンDB接続
- テーブル
- で
- 挿入データは、トランザクションのコミットトランザクションを開始します。
すべてのサービスは、同じ15のテーブルにある異なるデータセットでこれらの手順を実行します。
SQLプロファイラトレースは、挿入中にこれらのテーブルに排他ロックが存在することを示しています。
テーブルに挿入ステートメントを実行し、デッドロックで終了するだけで、テーブルレベルのロックが必要な理由をお聞かせください。それを防ぐための最善の方法は何か。
これを参照してくださいhttp://www.sql-server-performance.com/2006/deadlocks/ – hungryMind
トランザクションを使用していないときでもロックを取得していますか? –
SQL Serverトランザクションまたは.net? .netの場合は、コードを表示してください – gbn