Codice per simulare deadlock


26

Sto verificando la mia domanda ho bisogno di un po 'di codice che stabile simula la situazione di stallo in loco di database (lo script SQL se possibile).

Grazie.

AGGIUNTO:

Riproduzione di deadlock che coinvolgono solo una tabella


2
Non capisco bene la domanda. Puoi riformularlo un po '? Ovviamente le due persone di seguito ti hanno capito abbastanza bene, ma non ti sto seguendo del tutto. Intendi un codice che "stabilmente" simula un deadlock? Cosa farai dopo un deadlock? Vuoi solo provare che può succedere?
jcolebrand

Risposte:


29

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.


2

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/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.