it-swarm.asia

كود لمحاكاة الجمود

أنا أختبر طلبي أحتاج إلى بعض التعليمات البرمجية التي مستقرة تحاكي حالة الجمود في موقع قاعدة البيانات (سكربل سكربت إن أمكن).

شكرا لك.

مضاف:

إعادة إنتاج الجمود الذي يتضمن جدول واحد فقط

25
garik

أفضل طريقة هي استخدام الجداول الموجودة لديك بالفعل. إنشاء جدولين - table-a، table-b للاختبار يمكنك حتى تحديث نفس العمود بنفس المعلومات حتى لا تؤثر على أي بيانات حقيقية.

على سبيل المثال UPDATE table_a set 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.
29
David Hall

استخدم ال sp_getapplock إجراء النظام المخزن لأخذ ما تحتاجه الأقفال في نموذج التعليمات البرمجية.

بالمعنى الدقيق للكلمة إشارة Dijkstra . لا يزال مفيدا لعنة رغم ذلك

7
mrdenny

إليك طريقة أخرى مشابهة للطريقة المذكورة أعلاه ->

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

البرنامج النصي ليتم استخدامه في نافذة الاستعلام رقم 1

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

البرنامج النصي ليتم استخدامه في نافذة الاستعلام رقم 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/

2
Ajit Ananthram