हमारे पास एक प्रक्रिया है जो एक इन्वेंट्री रिपोर्ट तैयार करती है। क्लाइंट की ओर से, इस प्रक्रिया में रिपोर्ट के लिए डेटा का एक हिस्सा बनाने के लिए कार्यकर्ता थ्रेड्स की एक कॉन्फ़िगर करने योग्य संख्या को विभाजित करता है जो कई में से एक स्टोर से मेल खाती है (संभवतः हजारों, आमतौर पर दर्जनों)। प्रत्येक कार्यकर्ता थ्रेड एक वेब सेवा को कॉल करता है जो संग्रहीत प्रक्रिया को निष्पादित करता है।
प्रत्येक चंक को संसाधित करने के लिए डेटाबेस प्रक्रिया एक # तालिका तालिका में डेटा का एक गुच्छा इकट्ठा करती है। प्रत्येक प्रोसेसिंग चंक के अंत में, डेटा को टेम्पर्ड टेबल में स्थायी तालिका में लिखा जाता है। अंत में, प्रक्रिया के अंत में, क्लाइंट साइड पर एक धागा स्थायी टेम्पर्ड टेबल से सभी डेटा का अनुरोध करता है।
जितने अधिक उपयोगकर्ता इस रिपोर्ट को चलाते हैं, उतना ही धीमा हो जाता है। मैंने डेटाबेस में गतिविधि का विश्लेषण किया। एक बिंदु पर, मैंने देखा कि 35 अलग-अलग अनुरोध सभी प्रक्रिया में एक बिंदु पर अवरुद्ध हैं। इन सभी SPIDs के पास LATCH_EX
संसाधन पर 50 ms प्रतीक्षा प्रकार के आदेश पर था METADATA_SEQUENCE_GENERATOR (00000010E13CA1A8)
। एक SPID के पास यह संसाधन है, और अन्य सभी अवरुद्ध हैं। मुझे वेब खोज पर इस प्रतीक्षा संसाधन के बारे में कुछ भी नहीं मिला।
हम उपयोग कर रहे हैं कि अस्थायी तालिका में एक IDENTITY(1,1)
स्तंभ है। क्या ये SPIDs IDENTITY कॉलम की प्रतीक्षा कर रहे हैं? अवरोध को कम करने या समाप्त करने के लिए हम किन तरीकों का उपयोग कर सकते हैं?
सर्वर एक क्लस्टर का हिस्सा है। सर्वर 64-बिट Windows 2008 R2 एंटरप्राइज़ पर 64-बिट SQL Server 2012 मानक संस्करण SP1 चला रहा है। सर्वर में 64 जीबी रैम और 48 प्रोसेसर हैं, लेकिन डेटाबेस केवल 16 का उपयोग कर सकता है क्योंकि यह मानक संस्करण है।
(ध्यान दें कि मैं यह सब डेटा रखने के लिए tempdb में एक स्थायी तालिका का उपयोग करके डिजाइन से रोमांचित नहीं हूं। यह बदलना एक दिलचस्प तकनीकी और राजनीतिक चुनौती होगी, लेकिन मैं सुझावों के लिए तैयार हूं।)
अद्यतन 4/23/2013
हमने Microsoft के साथ एक समर्थन मामला खोला है। जैसे ही हम और अधिक सीखेंगे, मैं इस प्रश्न को अद्यतन रखूँगा।
अद्यतन 5/10/2013
SQL सर्वर समर्थन अभियंता सहमत हुए कि वेट आईडी आईडी के कारण थे। IDENTITY को हटाकर वेट को समाप्त किया गया। हम SQL 2008 R2 पर समस्या की नकल नहीं कर सके; यह केवल SQL 2012 पर हुआ।