यह उदाहरण SharePoint 2007 डेटाबेस (SP) को होस्ट करता है। हम एसपी सामग्री डेटाबेस के भीतर एक भारी उपयोग की गई तालिका के खिलाफ कई चयन / इन्सर्ट गतिरोधों का सामना कर रहे हैं। मैंने इसमें शामिल संसाधनों को कम कर दिया है, दोनों प्रक्रियाओं को गैर-संकुल सूचकांक पर ताले की आवश्यकता होती है।
INSERT को SELECT संसाधन पर IX लॉक की आवश्यकता होती है और SELS को INSERT संसाधन पर S लॉक की आवश्यकता होती है। डेडलॉक ग्राफ में तीन और संसाधन हैं, 1.) SELECT (निर्माता / उपभोक्ता समानांतर धागे) से दो, और 2.) INSERT।
मैंने आपकी समीक्षा के लिए गतिरोध ग्राफ संलग्न किया है। क्योंकि यह Microsoft कोड और तालिका संरचनाएँ हैं, हम इनमें कोई बदलाव नहीं कर सकते हैं।
हालाँकि, मैंने MSFT SP साइट पर पढ़ा है, कि वे MAXDOP इंस्टेंस स्तर कॉन्फ़िगरेशन विकल्प 1 को सेट करने की सलाह देते हैं। चूंकि यह उदाहरण कई अन्य डेटाबेस / अनुप्रयोगों के बीच साझा किया जाता है, इसलिए यह सेटिंग अक्षम नहीं की जा सकती।
इसलिए, मैंने इन SELECT स्टेटमेंट को समानांतर जाने से रोकने की कोशिश करने का फैसला किया। मैं जानता हूं कि यह एक समाधान नहीं है, लेकिन समस्या निवारण में मदद करने के लिए अधिक अस्थायी संशोधन है। इसके अलावा, मैंने ऐसा करने पर अपने मानक 25 से 40 तक "समानांतर के लिए लागत सीमा" को बढ़ा दिया, भले ही कार्यभार नहीं बदला है (अक्सर होने वाले SELECT / INSERT) गतिरोध गायब हो गए हैं। मेरा सवाल यह है कि क्यों?
SPID 356 INSERT में गैर-संकुल सूचकांक से संबंधित पृष्ठ पर IX लॉक है
SPID 690 का चयन निष्पादन आईडी 0 में उसी गैर-संकुलित सूचकांक से संबंधित पृष्ठ पर S लॉक है
अभी
SPID 356 SPID 690 संसाधन पर IX लॉक चाहता है, लेकिन इसे प्राप्त नहीं कर सकता क्योंकि SPID 356 SPID 690 निष्पादन आईडी द्वारा अवरुद्ध किया जा रहा है। SID
690 निष्पादन आईडी 1 लॉक SPID 356 संसाधन पर S लॉक चाहता है, लेकिन इसे प्राप्त नहीं कर सकता क्योंकि SPID 690 निष्पादन आईडी 1 को SPID 356 द्वारा अवरुद्ध किया जा रहा है और अब हमारे पास हमारा गतिरोध है।
निष्पादन योजना मेरे स्काईड्राइव पर पाई जा सकती है
पूर्ण गतिरोध का विवरण यहां पाया जा सकता है
अगर कोई मुझे यह समझने में मदद कर सकता है कि मैं वास्तव में इसकी सराहना क्यों करूंगा।
EventReceivers तालिका।
Uniqueidentifier कोई 16 क्रमांक
नाम nvarchar कोई 512
uniqueidentifier कोई 16 SiteId
WebId uniqueidentifier कोई 16
hostid uniqueidentifier कोई 16
HostType पूर्णांक नहीं 4
Itemid पूर्णांक नहीं 4
dirname nvarchar कोई 512
nvarchar 256 LeafName
प्रकार पूर्णांक नहीं 4
SequenceNumber पूर्णांक नहीं 4
विधानसभा nvarchar कोई 512
वर्ग nvarchar कोई 512
डेटा nvarchar no 512
फ़िल्टर nvarchar no 512
SourceId tContentTypeId no 512
SourceType int no 4
क्रेडेंशियल int नहीं 4
संदर्भ पाठ क्रमांक 16
ContextEventType varbinary कोई 16
ContextId varbinary कोई 16
ContextObjectId varbinary कोई 16
ContextCollectionId varbinary कोई 16
INDEX_NAME index_description index_keys
EventReceivers_ByContextCollectionId nonclustered प्राथमिक SiteId पर स्थित है, ContextCollectionId
EventReceivers_ByContextObjectId प्राथमिक SiteId पर स्थित Nonclustered, ContextObjectId
EventReceivers_ById Nonclustered, प्राथमिक SiteId पर स्थित है, ईद अद्वितीय
EventReceivers_ByTarget क्लस्टर, प्राथमिक SiteId, WebId, hostid, HostType, प्रकार, ContextCollectionId, ContextObjectId पर स्थित अद्वितीय, ContextId, ContextType, ContextEventType, SequenceNumber, असेंबली, क्लास EventReceivers_IdUnique
nonclustered, अद्वितीय, अद्वितीय कुंजी जो PRIMARY Id पर स्थित है
proc_InsertEventReceiver
औरproc_InsertContextEventReceiver
क्या नहीं करते हैं? इसके अलावा समानता को कम करने के लिए क्यों न केवल इन बयानों को सीधे प्रभावित किया जाए (मैक्सडॉप 1 का उपयोग करके) सर्वर-वाइड सेटिंग्स के साथ फ्यूजिंग के बजाय?