LoginSignup
1
0

デッドロック検証

Last updated at Posted at 2024-03-07

SQLServer

目的

意図的にデッドロックを発生させる

手順

1.テーブルを作成

.sql
CREATE TABLE Table1 (
    ID INT PRIMARY KEY IDENTITY,
    Name VARCHAR(50)
);

2.データ投入

.sql
@echo off
sqlcmd -S localhost -d sampleDB -U sa -P sample -Q "INSERT INTO Table1 (ID, Name) VALUES ('John');"
sqlcmd -S localhost -d sampleDB -U sa -P sample -Q "INSERT INTO Table1 (ID, Name) VALUES ('Alice');"

3.1→2の順にSELECT

ポイント

  • ID2を参照後 10秒待機
.sql
BEGIN TRAN

SELECT TOP(1) *
FROM Table1 WITH(ROWLOCK, UPDLOCK)
WHERE
ID = 1

WAITFOR DELAY '00:00:10'

SELECT TOP(1) *
FROM Table1 WITH(ROWLOCK, UPDLOCK)
WHERE
ID = 2

ROLLBACK

4.2→1の順にSELECT

ポイント
3.で10秒待機している間に実行

.sql
BEGIN TRAN

SELECT TOP(1) *
FROM Table1 WITH(ROWLOCK, UPDLOCK)
WHERE
ID = 2

WAITFOR DELAY '00:00:10'

SELECT TOP(1) *
FROM Table1 WITH(ROWLOCK, UPDLOCK)
WHERE
ID = 1

ROLLBACK
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0