एफवाईआई - जब आप एसक्यूएल 2005 और पैरामीटर के साथ संग्रहित प्रोसेस के साथ काम कर रहे हों तो आपको कुछ और जागरूक होना चाहिए।
एसक्यूएल सर्वर संग्रहित प्रो की निष्पादन योजना को पहले पैरामीटर के साथ संकलित करेगा जिसका उपयोग किया जाता है। तो अगर आप इसे चलाते हैं:
usp_QueryMyDataByState 'Rhode Island'
एक छोटे राज्य के डेटा के साथ निष्पादन योजना सबसे अच्छा काम करेगी। लेकिन अगर कोई मुड़कर भागे:
usp_QueryMyDataByState 'Texas'
रोड-आइलैंड-आकार के डेटा के लिए डिज़ाइन की गई निष्पादन योजना टेक्सास-आकार के डेटा के साथ उतनी कुशल नहीं हो सकती है। सर्वर के पुनरारंभ होने पर यह आश्चर्यजनक परिणाम उत्पन्न कर सकता है, क्योंकि नव निर्मित निष्पादन योजना को पहले जो भी पैरामीटर उपयोग किया जाता है, उस पर लक्षित किया जाएगा - जरूरी नहीं कि सबसे अच्छा हो। योजना को तब तक पुन:संकलित नहीं किया जाएगा जब तक कि ऐसा करने का कोई बड़ा कारण न हो, जैसे कि यदि आंकड़े फिर से बनाए जाते हैं।
यह वह जगह है जहाँ क्वेरी योजनाएँ आती हैं, और SQL Server 2008 बहुत सारी नई सुविधाएँ प्रदान करता है जो DBA को किसी विशेष क्वेरी योजना को लंबे समय तक पिन करने में मदद करती हैं, इससे कोई फर्क नहीं पड़ता कि पहले कौन से पैरामीटर कॉल किए जाते हैं।
मेरी चिंता यह है कि जब आपने अपनी संग्रहित प्रो का पुनर्निर्माण किया, तो आपने निष्पादन योजना को पुन:संकलित करने के लिए मजबूर किया। आपने इसे अपने पसंदीदा पैरामीटर के साथ बुलाया, और फिर निश्चित रूप से यह तेज़ था - लेकिन समस्या संग्रहित प्रो नहीं हो सकती है। हो सकता है कि संग्रहीत खरीद को किसी बिंदु पर पैरामीटर के असामान्य सेट के साथ पुन:संकलित किया गया हो और इस प्रकार, एक अक्षम क्वेरी योजना। हो सकता है कि आपने कुछ भी ठीक नहीं किया हो, और अगली बार सर्वर के पुनरारंभ होने या क्वेरी योजना के पुन:संकलित होने पर आपको उसी समस्या का सामना करना पड़ सकता है।