รหัสเพื่อจำลองการหยุดชะงัก


26

ฉันกำลังทดสอบแอปพลิเคชันของฉันฉันต้องการรหัสบางอย่างที่เสถียรจำลองการหยุดชะงักบนเว็บไซต์ฐานข้อมูล (สคริปต์ sql ถ้าเป็นไปได้)

ขอขอบคุณ.

เพิ่ม:

สร้าง deadlock ที่เกี่ยวข้องกับตารางเดียวเท่านั้น


2
ฉันไม่ค่อยเข้าใจคำถาม คุณสามารถใส่ชื่อใหม่ได้ไหม? เห็นได้ชัดว่าคนสองคนด้านล่างเข้าใจคุณดีพอ แต่ฉันไม่ได้ติดตามคุณ คุณหมายถึงรหัสที่ "เสถียร" จำลองการหยุดชะงักหรือไม่? คุณจะทำอะไรหลังจากที่มีการหยุดชะงัก คุณแค่ต้องการพิสูจน์ว่ามันสามารถเกิดขึ้นได้?
jcolebrand

คำตอบ:


29

วิธีที่ดีที่สุดคือการใช้ตารางที่คุณมีอยู่แล้ว สร้างสองตาราง - table-a, table-b สำหรับการทดสอบคุณสามารถอัปเดตคอลัมน์เดียวกันด้วยข้อมูลเดียวกันดังนั้นคุณจะไม่ส่งผลกระทบต่อข้อมูลจริงใด ๆ

เช่น UPDATE table_a ตั้งค่า ID = ID โดยที่ ID = 100;

เปิดสองเซสชันไปยังฐานข้อมูลเดียวกัน ในหนึ่งวิ่ง

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

เมื่อสองวิ่ง

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

จากนั้นคัดลอกคำสั่งอัพเดตไปยังเซสชันที่ตรงข้ามและเรียกใช้ในเวลาเดียวกัน ในหนึ่ง

update table_b set ID=ID where ID =100;

ในสอง

update table_a set ID=ID where ID = 100;

ฉันเพิ่งลองตอนนี้และไปที่ 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.

7

ใช้sp_getapplockขั้นตอนการจัดเก็บระบบเพื่อทำสิ่งที่เคยล็อคต้องในรหัสตัวอย่างของคุณ

พูดอย่างเคร่งครัดนี้เป็นสัญญาณ Dijkstra ยังคงมีประโยชน์แช่ง


sp_getapplockจะไม่ผิดพลาด มันจะรอให้หมดเวลาหมดอายุหรือ (หากไม่มีการหมดเวลา) ให้ส่งคืน-3( msdn.microsoft.com/en-us/library/ms189823.aspx )
Ian Boyd

2

นี่คือวิธีอื่นที่คล้ายกับวิธีการโพสต์ด้านบน ->

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

สคริปต์ที่จะใช้ใน Query Window # 1

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

สคริปต์ที่จะใช้ใน Query Window # 2

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

สคริปต์ที่จะเพิ่มในหน้าต่างการสืบค้น # 1

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

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนี้โปรดดูที่http://ajitananthram.wordpress.com/2014/02/23/scripts-to-force-a-deadlock-in-sql-server/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.