Ich teste meine Anwendung. Ich benötige Code, der den Deadlock auf der Datenbank-Site stabil simuliert (wenn möglich SQL-Skript).
Vielen Dank.
HINZUGEFÜGT:
Ich teste meine Anwendung. Ich benötige Code, der den Deadlock auf der Datenbank-Site stabil simuliert (wenn möglich SQL-Skript).
Vielen Dank.
HINZUGEFÜGT:
Antworten:
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, sodass 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 Lauf
BEGIN TRAN
update table_a set ID=ID where ID = 100;
Auf zwei laufen
BEGIN TRAN
update table_b set ID=ID where ID =100;
Kopieren Sie dann die Aktualisierungsanweisungen 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 das gerade ausprobiert und bin auf MS-SQL umgestiegen
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.
Verwenden Sie die sp_getapplock
gespeicherte Systemprozedur, um alle Sperren zu übernehmen, die für Ihren Beispielcode erforderlich sind.
Genau genommen ist dies ein Dijkstra-Semaphor . Trotzdem verdammt nützlich
sp_getapplock
Wirft keinen Fehler. Entweder wird gewartet, bis das Timeout abgelaufen ist, oder (falls es kein Timeout gibt) wird um -3
Hier ist eine andere Methode ähnlich der oben angegebenen ->
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 zur Verwendung in Abfragefenster 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Skript zur Verwendung in Abfragefenster 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Skript, das zum 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/