कोड गतिरोध का अनुकरण करने के लिए


26

मैं अपने आवेदन का परीक्षण कर रहा हूं मुझे कुछ कोड की आवश्यकता है जो डेटाबेस साइट पर गतिरोध को स्थिर करता है (यदि संभव हो तो sql स्क्रिप्ट)।

धन्यवाद।

जोड़े गए:

केवल एक तालिका से जुड़े डेडलॉक को पुन: प्रस्तुत करना


2
मैं सवाल को काफी नहीं समझता। क्या आप इसे थोड़ा सा reword कर सकते हैं? जाहिर है कि नीचे के दो लोग आपको अच्छी तरह से समझ गए थे, लेकिन मैं आपको काफी फॉलो नहीं कर रहा हूं। क्या आप कोड का मतलब है कि "stably" एक गतिरोध का अनुकरण करता है? गतिरोध होने के बाद आप क्या कर रहे होंगे? क्या आप सिर्फ यह साबित करना चाहते हैं कि ऐसा हो सकता है?
jcolebrand

जवाबों:


29

सबसे अच्छा तरीका यह होगा कि आपके पास पहले से मौजूद टेबल का उपयोग किया जाए। दो टेबल बनाएं - टेबल-ए, टेबल-बी एक परीक्षण के लिए आप एक ही जानकारी के साथ एक ही कॉलम को अपडेट कर सकते हैं ताकि आप किसी भी वास्तविक डेटा को प्रभावित न करें।

उदाहरण के लिए UPDATE टेबल_ए सेट आईडी = आईडी जहां आईडी = 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;

मैंने अभी यह कोशिश की और एमएस-एसक्यूएल पर चढ़ गया

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आपके सैंपल कोड पर कभी भी ताले लगाने के लिए सिस्टम स्टोरेज प्रक्रिया का उपयोग करें ।

कड़ाई से बोलते हुए, यह एक दिक्जस्त्र अर्धवृत्त है । फिर भी बहुत उपयोगी है


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

क्वेरी विंडो # 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/ देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.