it-swarm.com.de

Code zur Simulation eines Deadlocks

Ich teste meine Anwendung. Ich benötige Code, der stabil den Deadlock auf der Datenbank-Site simuliert (SQL-Skript, wenn möglich).

Vielen Dank.

HINZUGEFÜGT:

Reproduzieren von Deadlocks mit nur einer Tabelle

25
garik

Am besten verwenden Sie bereits vorhandene Tabellen. Erstellen Sie zwei Tabellen - Tabelle-a, Tabelle-b Für einen Test können Sie sogar dieselbe Spalte mit denselben Informationen aktualisieren, damit Sie keine realen Daten beeinflussen.

Zum Beispiel UPDATE table_a setze ID = ID wobei ID = 100;

Öffnen Sie zwei Sitzungen in derselben Datenbank. Auf einen laufen

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

Bei zwei Läufen

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

Kopieren Sie dann die Update-Anweisungen in die gegnerischen Sitzungen und führen Sie sie gleichzeitig aus. In Eins,

update table_b set ID=ID where ID =100;

In zwei

update table_a set ID=ID where ID = 100;

Ich habe es gerade versucht und bin auf MS-SQL gekommen

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

Verwenden Sie die sp_getapplock System gespeicherte Prozedur, um alle Sperren zu übernehmen, die für Ihren Beispielcode erforderlich sind.

Genau genommen ist dies ein Dijkstra-Semaphor . Trotzdem verdammt nützlich

7
mrdenny

Hier ist eine andere Methode ähnlich der oben beschriebenen ->

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

Skript, das im Abfragefenster Nr. 1 verwendet werden soll

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

Skript, das im Abfragefenster Nr. 2 verwendet werden soll

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

Skript, das dem Abfragefenster Nr. 1 hinzugefügt werden soll

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

Weitere Informationen hierzu finden Sie unter http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/

2
Ajit Ananthram