अपने पहले प्रश्न का उत्तर देना बंद कर दें। मेरे पास इंडेक्स आईडी नहीं है = 1.
हाँ आप करते हैं !!
चलो एसक्यूएल सर्वर 2014 सीटीपी 2 पर एडवेंचर वर्क्स 2012 डेटाबेस पर एक नज़र डालें। यह मेरा लैपटॉप विनिर्देश है।
एक टेबल नाम [AWBuildVersion] है। इसमें आपकी तालिका की तरह क्लस्टर्ड इंडेक्स है। इंडेक्स के तहत, हम देख सकते हैं कि पीके दिख रहा है। अगर हमें तालिका (sys.objects) की ऑब्जेक्ट आईडी मिलती है और इंडेक्स (sys.indexes) के लिए प्रविष्टि को देखते हैं, तो हम देख सकते हैं कि इंडेक्स स्थिति पर है 1.
संक्षेप में, डिफ़ॉल्ट रूप से प्राथमिक कुंजी एक क्लस्टर सूचकांक है।
http://technet.microsoft.com/en-us/library/ms177443(v=sql.105).aspx
ठीक है, तो क्या एक सूचकांक के बिना एक मेज है? उन तालिकाओं को ढेर कहा जाता है। उनके पास शून्य की स्थिति में अपनी खुद की अनुक्रमणिका होती है जो पहले आईएएम पेज को इंगित करती है।
http://technet.microsoft.com/en-us/library/ms188270(v=sql.105).aspx
नीचे कोड एक स्कीमा का चयन करें जांच का उपयोग कर एक नया स्कीमा [चालाक] और प्रतियां [AWBuildVersion] तालिका कहा जाता है बनाता है। चयन के बारे में अच्छी बात यह है कि कोई इंडेक्स नहीं चलाया जाता है।
use AdventureWorks2012
go
create schema [crafty] authorization [dbo];
go
select * into crafty.awbuildversion from dbo.awbuildversion
go
संक्षेप में, हम शून्य पर स्थिति सूचकांक के साथ परिभाषित ढेर देख सकते हैं।
तो एक गतिरोध क्या है और अनुरोध मोड यू क्या मतलब है?
एक डेडलॉक तब होता है जब दो प्रक्रियाएं एक ही समय में संसाधनों को पकड़ती हैं लेकिन उसी क्रम में नहीं। संक्षेप में, दोनों प्रक्रियाएं आगे नहीं बढ़ सकती हैं। इंजन कम से कम रोलबैक समय के साथ सत्र चुनता है और प्रक्रिया को मारता है।
http://technet.microsoft.com/en-us/library/ms178104(v=sql.105).aspx
एक तस्वीर एक हजार शब्दों के बराबर है! लेनदेन 1 grabs संसाधन 1. लेनदेन 2 grabs संसाधन 2. जब वे एक दूसरे को संसाधनों को पकड़ने की कोशिश करते हैं, एक डेडलॉक बनाया जाता है।
तो एक कुंजी लॉक और यूजर मोड यू क्या मतलब है?
अपनी तालिका अपडेट करने के लिए, आपको डेटा/अनुक्रमणिका पृष्ठों को अपडेट करने की आवश्यकता है। लेकिन डेटा पेज वास्तव में आपकी तालिका में इंडेक्स पेज (क्लस्टरेड इंडेक्स) हैं। एसक्यूएल इंजन एक (यू) पीडीएटी लॉक लेता है। वास्तविक लॉक के दौरान यह लॉक एक विशेष लॉक (एक्स) में बढ़ जाएगा।
जब दो प्रक्रियाएं एक विशेष लॉक का अनुरोध करती हैं, तो डेडलॉक की संभावना होती है।
इस विषय को पूरा करने के लिए साझा ताले (चयन) (एक ही समय में) को रोके बिना क्रियान्वित किया जा सकता आम तौर पर एक प्रक्रिया तो अवरुद्ध शुरू होता है एक गतिरोध में बदल जाता है जब इंजन गतिरोध प्रक्रिया धागा चक्रीय ग्राफ पता लगाता है।
डिफ़ॉल्ट अलगाव स्तर असामान्य पढ़ें।
http://technet.microsoft.com/en-us/library/ms175519(v=sql.105).aspx
इस बिंदु पर, आप एक गतिरोध की है।
आप यहां से कहां जाते हैं?
1 - संभवतः एक से अधिक सत्र (एसपीआईडी) एक ही कोड चला रहे हैं। क्यूं कर? क्या आप इसे बदल सकते हैं ताकि एक ही समय में केवल एक प्रक्रिया कोड चला सके?
2 - जेडीबीसी द्वारा उत्पन्न वास्तविक टीएसक्यूएल को पकड़ो। यह एसक्यूएल प्रोफाइलर और/या आपके डीएमवी के माध्यम से देखे जा सकते हैं।
विलय विवरण दोनों अद्यतन और/या INSERT करता है। इस प्रकार एक यौगिक ऑपरेशन।
3 - क्या आप अलगाव स्तर को क्रमबद्ध करने के लिए बदल सकते हैं?
http://technet.microsoft.com/en-us/library/ms173763.aspx
इससे अधिक ताले जोड़े जाएंगे और शायद आपके डेडलॉक मुद्दे को टाइमआउट समस्या में बदल देंगे। LOCK_TIMEOUT को कैसे सेट किया जा सकता है इस पर Kalen Daleny आलेख देखें। बीच में कुछ देरी के साथ ऑपरेशन को फिर से प्रयास करने के लिए आपको अपना कोड समायोजित करना होगा।
http://sqlmag.com/sql-server/inside-sql-server-controlling-locking
मुझे आशा है कि इस जानकारी में मदद करता है।
यदि आपको और सहायता चाहिए तो कृपया अपना टीएसक्यूएल पोस्ट करें।