it-swarm-id.com

Kode untuk mensimulasikan kebuntuan

Saya menguji aplikasi saya, saya memerlukan beberapa kode yang stable mensimulasikan kebuntuan pada situs database (skrip sql jika memungkinkan).

Terima kasih.

TAMBAH:

Menghasilkan kebuntuan yang hanya melibatkan satu tabel

25
garik

Cara terbaik adalah menggunakan tabel yang sudah Anda miliki. Buat dua tabel - table-a, table-b Untuk tes Anda bahkan dapat memperbarui kolom yang sama dengan informasi yang sama sehingga Anda tidak mempengaruhi data nyata.

Misalnya UPDATE table_a set ID = ID di mana ID = 100;

Buka dua sesi ke database yang sama. Pada satu, jalankan

BEGIN TRAN
update table_a set ID=ID where ID = 100;

Di jalankan dua

BEGIN TRAN
update table_b set ID=ID where ID =100;

Kemudian, salin laporan pembaruan ke sesi yang berlawanan dan jalankan pada saat yang sama. Jadi satu,

update table_b set ID=ID where ID =100;

Dalam dua

update table_a set ID=ID where ID = 100;

Saya baru saja mencoba ini dan menggunakan 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.
29
David Hall

Menggunakan sp_getapplock prosedur tersimpan sistem untuk mengambil apa yang perlu dikunci pada kode sampel Anda.

Sebenarnya, ini adalah Dijkstra semaphore . Masih sangat berguna

7
mrdenny

Berikut metode lain yang mirip dengan yang diposting di atas ->

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))

Skrip untuk digunakan di Jendela Kueri # 1

BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)

Script yang akan digunakan di Query Window # 2

BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)

Script yang akan ditambahkan ke Jendela Permintaan # 1

INSERT dbo.Tbl2 (id, col) VALUES (111, 555)

Untuk detail tambahan tentang ini, lihat http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/

2
Ajit Ananthram