it-swarm.it

Codice per simulare deadlock

Sto testando la mia applicazione, ho bisogno di un codice che stabile simuli il deadlock sul sito del database (script sql se possibile).

Grazie.

ha aggiunto:

Riproduzione di deadlock che coinvolgono solo una tabella

25
garik

Il modo migliore sarebbe usare le tabelle che hai già. Crea due tabelle: tabella-a, tabella-b Per un test puoi persino aggiornare la stessa colonna con le stesse informazioni in modo da non influenzare alcun dato reale.

Ad esempio UPDATE table_a imposta ID = ID dove ID = 100;

Aprire due sessioni nello stesso database. Su uno, corri

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

In due manche

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

Quindi, copia le istruzioni di aggiornamento nelle sessioni opposte ed esegui allo stesso tempo. In uno,

update table_b set ID=ID where ID =100;

In due

update table_a set ID=ID where ID = 100;

Ho appena provato questo ora e ho ottenuto 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

Usa il sp_getapplock procedura memorizzata dal sistema per accettare tutti i blocchi di cui hai bisogno sul tuo codice di esempio.

A rigor di termini, questo è un Dijkstra semaphore . Comunque dannatamente utile

7
mrdenny

Ecco un altro metodo simile a quello pubblicato sopra ->

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

Script da utilizzare nella finestra query n. 1

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

Script da utilizzare nella finestra query n. 2

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

Script da aggiungere alla finestra query n. 1

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

Per ulteriori dettagli al riguardo, consultare http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/

2
Ajit Ananthram