-1

スキーマの一部が次のように見えるテーブルがあります。

ここに画像の説明を入力

SubId 列は PK であり、クラスター化インデックスです。このテーブルに行を挿入する (挿入のみ) C# (Entity Framework を使用) アプリケーションがあります。アプリケーションはマルチスレッドで、通常は一度に 4 つのスレッドをアクティブにして、このテーブルに行を挿入します。かなり頻繁に、次のようなデッドロックが発生します。

ここに画像の説明を入力

私はこれに本当に混乱しています。明らかにデッドロックが発生していますが、方法がわかりません。私は厳密に挿入を行っており、アプリケーション外の他のプロセスがこのテーブルにアクセスしていません。

4

1 に答える 1

0

挿入でもデッドロックが発生する可能性があります。たとえば、あなたが持っていると仮定しますCREATE TABLE test23 (id INT NOT NULL PRIMARY KEY);

それで

--Process 1 :
--1
BEGIN TRANSACTION;
INSERT INTO test23(id) VALUES (1);
-- Process 2:
--2
BEGIN TRANSACTION;
INSERT INTO test23(id) VALUES (2);


--Process 1 :
--3    
INSERT INTO test23(id) VALUES (2);

-- Process 2:
--4    
INSERT INTO test23(id) VALUES (1);
--Deadlock!

テーブルと実際のステートメントに関する詳細を提供していないため、そうであるかどうかを判断するのは非常に困難ですが、正しい方向に向けられることを願っています.

于 2013-07-08T19:27:43.197 に答える