アプリケーションをテストしていますが、stableがデータベースサイトのデッドロックをシミュレートするコードが必要です(可能な場合はSQLスクリプト)。
ありがとうございました。
ADDED:
最良の方法は、すでに持っているテーブルを使用することです。 2つのテーブルを作成します-table-a、table-bテストでは、実際のデータに影響を与えないように、同じ列を同じ情報で更新することもできます。
たとえば、UPDATE table_aはID = IDでID = 100を設定します。
同じデータベースへの2つのセッションを開きます。一方では、実行します
BEGIN TRAN
update table_a set ID=ID where ID = 100;
2つの実行で
BEGIN TRAN
update table_b set ID=ID where ID =100;
次に、更新ステートメントを反対側のセッションにコピーし、同時に実行します。一つには、
update table_b set ID=ID where ID =100;
二人で
update table_a set ID=ID where ID = 100;
私は今これを試してみて、MS-SQLに乗りました
Msg 1205, Level 13, State 56, Line 1
Transaction (Process ID 23) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
使用 sp_getapplock
システムコードは、サンプルコードで必要なロックを取得します。
厳密に言えば、これは Dijkstraセマフォ です。まだ便利なのに
上記の方法と同様の別の方法を次に示します->
CREATE TABLE Tbl1 (id INT NOT NULL PRIMARY KEY CLUSTERED, col INT)
CREATE TABLE Tbl2 (id INT NOT NULL PRIMARY KEY CLUSTERED, col INT REFERENCES dbo.Tbl1(id))
クエリウィンドウ#1で使用するスクリプト
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
クエリウィンドウで使用するスクリプト#2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
クエリウィンドウ#1に追加するスクリプト
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
この詳細については、 http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/ を参照してください。