Testuję swoją aplikację Potrzebuję trochę kodu, który stabilnie symuluje impas na stronie bazy danych (skrypt SQL, jeśli to możliwe).
Dziękuję Ci.
DODANY:
Testuję swoją aplikację Potrzebuję trochę kodu, który stabilnie symuluje impas na stronie bazy danych (skrypt SQL, jeśli to możliwe).
Dziękuję Ci.
DODANY:
Odpowiedzi:
Najlepszym sposobem byłoby użycie tabel, które już masz. Utwórz dwie tabele - tabela-a, tabela-b W przypadku testu możesz nawet zaktualizować tę samą kolumnę o te same informacje, aby nie wpływać na żadne rzeczywiste dane.
Na przykład UPDATE table_a ustaw ID = ID gdzie ID = 100;
Otwórz dwie sesje dla tej samej bazy danych. Na jeden biegnij
BEGIN TRAN
update table_a set ID=ID where ID = 100;
Dwa biegi
BEGIN TRAN
update table_b set ID=ID where ID =100;
Następnie skopiuj instrukcje aktualizacji do sesji przeciwnych i uruchom je w tym samym czasie. W jednym,
update table_b set ID=ID where ID =100;
We dwóch
update table_a set ID=ID where ID = 100;
Właśnie próbowałem tego teraz i dostałem 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.
Użyj sp_getapplock
systemowej procedury składowanej, aby wziąć to, co kiedykolwiek blokuje twój przykładowy kod.
Ściśle mówiąc, jest to semafor Dijkstry . Wciąż cholernie przydatne
sp_getapplock
nie zgłasza błędu. Będzie albo czekał na upłynięcie limitu czasu, albo (jeśli nie ma limitu czasu) zwróci -3
( msdn.microsoft.com/en-us/library/ms189823.aspx )
Oto kolejna metoda podobna do tej zamieszczonej powyżej ->
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))
Skrypt do użycia w oknie zapytania nr 1
BEGIN TRAN
INSERT dbo.Tbl1 (id, col) VALUES (2, 999)
Skrypt do użycia w oknie zapytania nr 2
BEGIN TRAN
INSERT dbo.Tbl2 (id, col) VALUES (111, 2)
Skrypt do dodania do okna zapytania nr 1
INSERT dbo.Tbl2 (id, col) VALUES (111, 555)
Aby uzyskać dodatkowe informacje na ten temat, patrz http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/