2011-08-08 35 views

回答

3

創建兩個存儲過程。

第一應該啓動一個事務,修改表1(和需要較長的時間),然後修改表2.

第二應該啓動一個事務,修改表2(和需要較長的時間),然後修改表1.


理想情況下,修改應該影響同一行,或創建表鎖。


然後,在客戶端應用程序,啓動SP1,並立即然後也開始SP2(SP1已完成之前)。

0

啓動一個進程,使用帶腳本的while循環連續插入或更新表,並運行所需的sp。

0

得到死鎖的簡單和簡短的答案將是以相反的順序訪問表數據,並因此在兩個連接之間引入循環死鎖。讓我告訴你代碼:

Create table vin_deadlock (id int, Name Varchar(30)) 
GO 

Insert into vin_deadlock values (1, 'Vinod') 
Insert into vin_deadlock values (2, 'Kumar') 
Insert into vin_deadlock values (3, 'Saravana') 
Insert into vin_deadlock values (4, 'Srinivas') 
Insert into vin_deadlock values (5, 'Sampath') 
Insert into vin_deadlock values (6, 'Manoj') 
GO 

現在準備好了表格。只需從兩個連接中以相反的順序更新列:

-- Connection 1 
Begin Tran 
Update vin_deadlock 
SET Name = 'Manoj' 
Where id = 6 
WAITFOR DELAY '00:00:10' 
Update vin_deadlock 
SET Name = 'Vinod' 
Where id = 1 
and from connection 2 

-- Connection 2 
Begin Tran 
Update vin_deadlock 
SET Name = 'Vinod' 
Where id = 1 
WAITFOR DELAY '00:00:10' 
Update vin_deadlock 
SET Name = 'Manoj' 
Where id = 6 

而這會導致死鎖。你可以從profiler中看到死鎖圖。