Mã mô phỏng bế tắc


26

Tôi đang thử nghiệm ứng dụng của mình Tôi cần một số mã ổn định mô phỏng sự bế tắc trên trang web cơ sở dữ liệu (tập lệnh sql nếu có thể).

Cảm ơn bạn.

THÊM:

Tái tạo các bế tắc chỉ liên quan đến một bảng


2
Tôi không hiểu câu hỏi. Bạn có thể điều chỉnh lại một chút không? Rõ ràng hai người dưới đây hiểu bạn đủ rõ, nhưng tôi không hoàn toàn theo dõi bạn. Bạn có nghĩa là mã "ổn định" mô phỏng một bế tắc? Bạn sẽ làm gì sau khi bế tắc? Bạn chỉ muốn chứng minh rằng nó có thể xảy ra?
jcolebrand

Câu trả lời:


29

Cách tốt nhất là sử dụng các bảng bạn đã có. Tạo hai bảng - bảng-a, bảng-b Để kiểm tra, bạn thậm chí có thể cập nhật cùng một cột với cùng thông tin để bạn không ảnh hưởng đến bất kỳ dữ liệu thực nào.

Ví dụ: CẬP NHẬT bảng_a đặt ID = ID trong đó ID = 100;

Mở hai phiên vào cùng một cơ sở dữ liệu. Trên một, chạy

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

Trên hai đường chạy

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

Sau đó, sao chép các báo cáo cập nhật vào các phiên đối lập và chạy cùng một lúc. Trong một,

update table_b set ID=ID where ID =100;

Trong hai

update table_a set ID=ID where ID = 100;

Tôi mới thử cái này bây giờ và dùng 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

Đây là một phương pháp khác tương tự như phương pháp được đăng ở trên ->

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

Tập lệnh được sử dụng trong Cửa sổ truy vấn số 1

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

Tập lệnh được sử dụng trong Cửa sổ truy vấn # 2

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

Tập lệnh được thêm vào Cửa sổ truy vấn số 1

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

Để biết thêm chi tiết về điều này, hãy tham khảo http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.