it-swarm-eu.dev

Kód simulující zablokování

Testuji svou aplikaci Potřebuji nějaký kód, který stabilní simuluje zablokování na databázovém serveru (pokud je to možné, skript sql).

Děkuju.

PŘIDANÉ:

Rozmnožování uváznutí u jedné tabulky

25
garik

Nejlepší způsob by bylo použít tabulky, které již máte. Vytvořte dvě tabulky - tabulka-a, tabulka-b Pro test můžete dokonce aktualizovat stejný sloupec se stejnými informacemi, abyste neovlivnili žádná reálná data.

Například UPDATE table_a set ID = ID kde ID = 100;

Otevřete dvě relace do stejné databáze. Na jednom běžte

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

Ve dvou jízdách

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

Poté zkopírujte příkazy aktualizace na nepřátelské relace a spusťte je současně. V jednom,

update table_b set ID=ID where ID =100;

Ve dvě

update table_a set ID=ID where ID = 100;

Právě jsem to vyzkoušel a dostal se na 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

Použijte sp_getapplock systémová uložená procedura, která vezme to, co se kdy zamkne na ukázkovém kódu.

Přesně řečeno, jedná se o Dijkstra semafor . Stále sakra užitečné

7
mrdenny

Zde je další metoda podobná metodě uvedené výše ->

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 pro použití v okně dotazu č. 1

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

Skript pro použití v okně dotazu č. 2

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

Skript, který bude přidán do dotazovacího okna # 1

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

Další podrobnosti najdete v http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/

2
Ajit Ananthram