संग्रहीत कार्यविधि का पुनर्संकलन सुनिश्चित करने के कुछ तरीके हैं:
WITH RECOMPILE
का उपयोग करना ,- संग्रहीत कार्यविधि को गतिशील बनाना (सोचें
exec()
) sp_recompile
के साथ पुन:संकलन के लिए खरीद को चिह्नित करना .- उस स्कीमा को बदलना जिस पर कैश्ड क्वेरी योजना निर्भर करती है
- कॉलिंग
DBCC FREEPROCCACHE
- क्वेरी स्तर पर एक खरीद के भीतर एक व्यक्तिगत बयान RECOMPILE क्वेरी संकेत (एसक्यूएल 2008) के साथ पुन:संकलित किया जा सकता है।
पुनर्संकलन में कारक
ऊपर सूचीबद्ध कठिन-कारकों के अलावा, संग्रहीत कार्यविधि पुनर्संकलन का क्या कारण है? खैर, बहुत सी बातें। इनमें से कुछ ऊपर दी गई सूची के साथ जुड़े हुए हैं, लेकिन मैं उन्हें फिर से प्रस्तुत करना चाहता हूं क्योंकि यह स्पष्ट नहीं हो सकता है।
- बहुत सारा डेटा डालना या हटाना (इंडेक्स और टेबल में डेटा घनत्व अक्सर क्वेरी योजनाओं को नियंत्रित करता है)
- पुनर्निर्माण अनुक्रमणिका (अंतर्निहित वस्तुओं में परिवर्तन)
- अस्थायी टेबल बनाना/छोड़ना (फिर से, अंतर्निहित डीएमएल परिवर्तन)।
- क्वेरी प्लान पुराना हो गया है (सोचें कि हाल ही में उपयोग नहीं किया गया है और sql मेमोरी उपयोग को साफ करना चाहता है)
यह किसी भी तरह से एक विस्तृत सूची नहीं है। क्वेरी ऑप्टिमाइज़र विकसित होता है और आश्चर्य होता है कि आप कितने समय से SQL सर्वर का उपयोग कर रहे हैं। लेकिन यहां कुछ संसाधन हैं जो उपयोगी हो सकते हैं:
- संग्रहीत प्रक्रिया पुनर्संकलन की समस्या का निवारण (एक बूढ़ा, लेकिन एक गुडी)
- संग्रहीत कार्यविधियों को फिर से तैयार करना
- पुनर्संकलन से बचने के लिए SQL सर्वर संग्रहीत कार्यविधियों का अनुकूलन
- निष्पादन योजना कैशिंग और पुन:उपयोग (एक अवश्य पढ़ें)
लेकिन प्रतीक्षा करें - और भी बहुत कुछ है !
इसके साथ ही, आपके प्रश्न में अनुमान यह है कि प्रदर्शन के लिए पुन:संकलन हमेशा खराब होते हैं। वास्तव में, अक्सर पुनर्मूल्यांकन अच्छा होता है।
तो आप इसे कब पुन:संकलित करना चाहेंगे? आइए एक खरीद का एक उदाहरण देखें जो अंतिम नाम से खोज करता है। संग्रहीत कार्यविधियाँ 'पैरामीटर सूँघने
करती हैं ' जो एक आशीर्वाद है (यदि यह आपके लिए काम करता है) और एक अभिशाप (यदि यह आपके खिलाफ काम करता है)। Zebr%
. पर सबसे पहले किसी की खोज को पास करें ज़ेरब्रोस्की के लिए। अंतिम नाम सूचकांक को पता चलता है कि यह बहुत विशिष्ट है और वापस आ जाएगा, मान लीजिए, एक लाख से 3 पंक्तियाँ - इसलिए एक निष्पादन योजना बनाई गई है। कम पंक्ति परिणाम के लिए संकलित खरीद के साथ, अगली खोज S%
. के लिए है . ठीक है, S आपका सबसे सामान्य नाम है और 1 मिलियन में से 93,543 पंक्तियों से मेल खाता है।