हम एक लेनदेन तालिका रखने की कोशिश कर रहे हैं जो नियमित आधार पर केवल नए रिकॉर्ड डाले जाते हैं।SQL सर्वर 2008 लंबे लेनदेन INSERT पर SELECT को अवरुद्ध क्यों कर रहा है?
इस साधारण तालिका के लिए हमें समय के साथ लगातार नए रिकॉर्ड जोड़ने की आवश्यकता है। इस तालिका में लेनदेन की मात्रा काफी अधिक होने की उम्मीद है, और लेनदेन (> 1000) के आवधिक बैच आयात भी हो सकते हैं जो पूर्ण होने में कई सेकंड लग सकते हैं।
इस डेटा से हम आवश्यक मानों को वापस करने के लिए अलग-अलग स्तंभों को समूहीकृत चुनिंदा बयानों का एक सेट करते हैं।
हमारे शुरुआती परीक्षण से हमें SQL सर्वर से संबंधित होने के लिए एक बाधा मिली है जो हमारे चयन को अवरुद्ध करता है जब INSERTS के लेनदेन के बीच में होता है।
नीचे एक साधारण उदाहरण है जिसे समस्या को दर्शाने के लिए चलाया जा सकता है।
- सरल डीबी तालिका
create table LOCK_TEST (
LOCK_TEST_ID int identity ,
AMOUNT int);
- 1 क्वेरी खिड़की
begin tran
insert into LOCK_TEST (AMOUNT) values (1);
WAITFOR DELAY '00:00:15' ---- 15 Second Delay
insert into LOCK_TEST (AMOUNT) values (1);
commit
में इस भागो - क्वेरी में 2 रन इस समानांतर
select SUM(AMOUNT)
from LOCK_TEST;
में
मैं उम्मीद करेंगे प्रश्न 2 सीधे वापस लौटने के लिए, 0 तक क्वेरी 1 पूरा होने तक, और फिर दिखाएं 2. हम दूसरी क्वेरी से 1 वापस नहीं देखना चाहते हैं।
उत्तर हमने चयनित कथन पर (NOLOCK) से संबंधित देखा है। लेकिन यह लेनदेन की सीमाओं का उल्लंघन करता है, और लौटाई गई जानकारी प्रकृति में वित्तीय हो सकती है और हम अपने प्रश्नों में कोई असामान्य विवरण नहीं देखना चाहते हैं।
मेरे समस्या सम्मिलित तरफ हो रहा है ...
क्यों सम्मिलित करें SELECT कथन भले ही यह किसी भी मौजूदा डेटा को संशोधित नहीं कर रहा है ब्लॉक करता है?
बोनस अंक प्रश्न: क्या यह SQL सर्वर का "फीचर" है, या क्या हम इसे अन्य डेटाबेस स्वादों पर भी पाएंगे?
अद्यतन मेरे पास अब स्थानीय ऑरैकल डेटाबेस खोजने और एक ही सरल परीक्षण चलाने का समय है। यह परीक्षण पास जैसा कि मैं उम्मीद करता हूं।
Ie मैं जितनी बार मैं चाहता हूँ क्वेरी चला सकते हैं, और यह शून्य वापस आ जाएगी जब तक 1 लेन-देन, करता है तो रिटर्न 2.
वहाँ इस तरह एसक्यूएल सर्वर काम करने के लिए कोई तरीका है? या क्या हमें ओरेकल में जाने की जरूरत है?
इन तालिकाओं पर आपके पास कौन से इंडेक्स हैं? क्या आपके पास नियमित इंडेक्स रखरखाव है? –
इस समय कोई अनुक्रमणिका नहीं है। इस पोस्ट में सूचीबद्ध सरल उदाहरण देखें, सरल 2 कॉलम तालिका से अधिक कुछ नहीं, बुनियादी सम्मिलन और चयन इस समस्या को फिर से बनाने के लिए उपयोग किया जाता है। – stevemac