पर अपडेट चलाना SQL सर्वर 2005 में मेरे पास एक बड़ी तालिका (~ 170 मिलियन पंक्तियां, 2 nvarchar और 7 int कॉलम) है जो लगातार डाला जा रहा है। सब कुछ प्रदर्शन परिप्रेक्ष्य से इसके साथ ठीक काम करता है, लेकिन प्रत्येक बार एक बार मुझे तालिका में पंक्तियों का एक सेट अपडेट करना होता है जो समस्याओं का कारण बनता है। यह ठीक काम करता है अगर मैं डेटा का एक छोटा सा सेट अपडेट करता हूं, लेकिन अगर मुझे 40,000 रिकॉर्ड का एक सेट अपडेट करना है या तो टेबल पर लगभग 3 मिनट और ब्लॉक लगते हैं जो इन्सर्ट विफल होने लगने से समस्याएं पैदा करते हैं।बड़ी, भारी उपयोग की गई तालिका
यदि मैं अद्यतन किए जाने वाले डेटा को वापस पाने के लिए केवल एक चयन चलाता हूं तो मुझे लगभग 2 सेकंड में 40k रिकॉर्ड वापस मिलते हैं। यह केवल अद्यतन है जो हमेशा के लिए लेते हैं। यह अद्यतन के लिए निष्पादन योजना में प्रतिबिंबित होता है जहां क्लस्टर इंडेक्स अपडेट लागत का 9 0% और पंक्तियों को 10% लागत लेने के लिए इंडेक्स की तलाश और शीर्ष ऑपरेटर लेता है। जिस कॉलम को मैं अपडेट कर रहा हूं वह किसी भी इंडेक्स कुंजी का हिस्सा नहीं है, इसलिए ऐसा कुछ भी पुनर्गठित करने जैसा नहीं है।
क्या किसी के पास कोई विचार है कि इसे कैसे बढ़ाया जा सकता है? मेरा विचार अब एक ऐसी सेवा लिखना है जो यह देखने के लिए होगा कि इन अद्यतनों को कब करना होगा, उन रिकॉर्ड्स को वापस खींचें जिन्हें अपडेट किया जाना है, और फिर उन्हें एक-एक करके लूप करें और अपडेट करें। यह मेरी व्यावसायिक जरूरतों को पूरा करेगा, लेकिन यह बनाए रखने के लिए एक और मॉड्यूल है और अगर मैं इसे चीजों के डीबीए पक्ष से ठीक कर सकता हूं तो मुझे अच्छा लगेगा।
किसी भी विचार के लिए धन्यवाद!
आप पोस्ट कर सकते हैं तालिका परिभाषा (प्राथमिक कुंजी, अनुक्रमित, आदि सहित), मेज पर किसी भी ट्रिगर और वास्तविक अद्यतन क्वेरी स्वयं? – MatBailie
सिर्फ एक विचार: शेरिंग – Adrian
@ एड्रियन - लेकिन यदि अपडेट किए गए फ़ील्ड क्लस्टर इंडेक्स में नहीं हैं (या स्पष्ट रूप से कोई अन्य इंडेक्स) निष्पादन योजना क्लस्टर्ड इंडेक्स अपडेट क्यों दिखाएगी? – MatBailie