SQL Server でデッドロックを検知する方法を紹介します。
DBCC TRACEON (1204,-1) DBCC TRACEON (1222,-1) |
CREATE TABLE TestTableA( Code integer, Descr VARCHAR(100), Qty INT ) CREATE TABLE TestTableB( Code integer, Descr VARCHAR(100), Qty INT ) |
INSERT INTO dbo.TestTableA( Code, Descr, Qty ) VALUES (1,'TORX T10', 1), (2, 'TORX T20', 2) INSERT INTO dbo.TestTableB( Code, Descr, Qty ) VALUES (3,'TORX T30', 2), (4, 'TORX T40', 3) |
BEGIN TRAN UPDATE dbo.TestTableA SET Qty = 100 WHERE Code = 1 WAITFOR DELAY '00:00:30' UPDATE dbo.TestTableB SET Qty = 200 WHERE Code = 3 |
BEGIN TRAN WAITFOR DELAY '00:00:10' UPDATE dbo.TestTableB SET Qty = 300 WHERE Code = 3 UPDATE dbo.TestTableA SET Qty = 400 WHERE Code = 1 |
メッセージ 1205、レベル 13、状態 45、行 4 トランザクション (プロセス ID 52) が、ロック 個のリソースで他のプロセスとデッドロックして、このトランザクションがそのデッドロックの対象となりました。トランザクションを再実行してください。 |
DBCC TRACEOFF (1204,-1) DBCC TRACEOFF (1222,-1) |