विषय पर मेरी खोज मुझे यहाँ ले आई, इसलिए मैं इस विषय पर अपना हालिया अनुभव साझा करना चाहूंगा।
मैं एसक्यूएल 2014 चला रहा था, इसलिए मुझे लगा कि मैं 4199 की देखभाल के लिए थोड़ा सुरक्षित होने से सुरक्षित रहूंगा ... लेकिन यह सच नहीं था ...
यदि आपको 4199 की आवश्यकता है तो निदान कैसे करें
यदि आपकी क्वेरी खराब तरीके से चलती है , खासकर जब आपको लगता है कि ऐसा नहीं करना चाहिए, तो इसके बाद के अंत को जोड़ने का प्रयास करें, यह भी देखें कि क्या यह आपकी सभी समस्याओं को ठीक करता है, क्योंकि आपको 4199 की आवश्यकता हो सकती है ("सभी क्वेरी ऑप्टिमाइज़र फ़िक्सेस सक्षम करें।" )
SELECT SomeColumn
FROM SomeTable
OPTION(QUERYTRACEON 4199)
मेरी स्थिति में, मेरे पास एक शीर्ष 10 खंड था जो एक ऐसी क्वेरी को उड़ा रहा था जो बिना ठीक चले, जिससे मुझे लगता है कि कुछ गड़बड़ हो रहा था, और वह 4199 मदद कर सकता है।
लगभग 4199
कोई भी SQL सर्वर क्वेरी ऑप्टिमाइज़र बग / प्रदर्शन फ़िक्सेस जो नए प्रमुख संस्करण रिलीज़ होने के बाद बनाए जाते हैं वास्तव में छिपे हुए और अवरुद्ध होते हैं। यह इस मामले में है कि वे वास्तव में कुछ अन्य सैद्धांतिक रूप से अनुकूलित कार्यक्रम को नुकसान पहुंचा सकते हैं। इसलिए, अपडेट स्थापित करें जैसा कि आप कर सकते हैं, वास्तविक क्वेरी ऑप्टिमाइज़र परिवर्तन डिफ़ॉल्ट रूप से सक्षम नहीं हैं। इसलिए, एक बार फिक्स या एन्हांसमेंट हो जाने के बाद, यदि आप इसका लाभ उठाना चाहते हैं तो 4199 एक आवश्यकता बन जाती है। जितने भी सुधार दिखाई देंगे, आप अंततः खुद को इस पर बदल पाएंगे जब उनमें से एक आपको प्रभावित करेगा। ये फिक्सेस आमतौर पर अपने स्वयं के ट्रेस झंडे से बंधे होते हैं, लेकिन 4199 का उपयोग मास्टर के रूप में किया जाता है "हर फिक्स को चालू करें।"
यदि आपको पता है कि आपको कौन सी फिक्स की जरूरत है, तो आप 4199 का उपयोग करने के बजाय उन्हें टुकड़ा-भोजन सक्षम कर सकते हैं। यदि आप सभी फिक्स को सक्षम करना चाहते हैं, तो 4199 का उपयोग करें।
ठीक है, तो आप चाहते हैं 4199 ग्लोबली ...
बस एक SQL एजेंट जॉब बनाएँ जो विश्व स्तर पर ट्रेस फ़्लैग को सक्षम करने के लिए हर सुबह निम्न पंक्ति के साथ चलती है। यह सुनिश्चित करता है कि अगर किसी ने उन्हें बंद कर दिया या आदि, कि वे वापस चालू हो जाएं। इस जॉब स्टेप में बहुत ही सरल sql है:
DBCC TRACEON (4199, -1);
जहाँ -1 DBCC TRACEON में वैश्विक भाग को निर्दिष्ट करता है। अधिक जानकारी के लिए देखें:
https://msdn.microsoft.com/en-us/library/ms187329.aspx?f=255&MSPPError=-2147217396
"पुनरावर्ती" प्रश्न योजना
अपने सबसे हाल के प्रयास में मुझे विश्व स्तर पर 4199 को सक्षम करना पड़ा, और फिर मौजूदा कैश्ड क्वेरी योजनाओं को भी हटाना पड़ा :
sp_recompile 'dbo.SomeTable'
https://msdn.microsoft.com/en-us/library/ms181647.aspx?f=255&MSPPError=-2147217396
जहाँ recompile संग्रहीत कार्यविधि डेटाबेस ऑब्जेक्ट (जैसे तालिका) से संबंधित किसी भी क्वेरी योजना को ढूंढती है और उन क्वेरी योजनाओं को हटा देती है, जिससे उन्हें संकलित करने के लिए एक समान क्वेरी चलाने के लिए अगले प्रयास की आवश्यकता होती है।
इसलिए, मेरे मामले में 4199 ने खराब क्वेरी योजनाओं को बनाए जाने से बचाए रखा, लेकिन मुझे उन लोगों को भी हटाना पड़ा जो अभी भी sp_recompile के माध्यम से कैश किए गए थे। प्रभावित क्वेरी से किसी भी तालिका को चुनें और आपको उस क्वेरी को फिर से आज़माने के लिए अच्छा होना चाहिए, यह मानते हुए कि आपने अब वैश्विक स्तर पर 4199 को सक्षम कर दिया है और आपत्तिजनक कैश्ड क्वेरी योजना को साफ़ कर दिया है।
4199 पर निष्कर्ष में
जब आप अनुक्रमित का उपयोग करते हैं, तो एक स्मार्ट क्वेरी प्लान ऑप्टिमाइज़ेशन वास्तव में उन इंडेक्सों का समझदारी से उपयोग करना महत्वपूर्ण हो जाता है, और यह मानते हुए कि समय के साथ क्वेरी ऑप्टिमाइज़ेशन प्रक्रिया के कुछ फिक्स जारी किए जाएंगे, आप आमतौर पर सुरक्षित रूप से केवल 4199 के साथ चलाने के लिए सुरक्षित पानी में हैं, जब तक आपको पता चलता है कि कुछ नए फ़िक्सेस वास्तव में अत्यधिक अनुकूलित डेटाबेस के साथ अच्छी तरह से नहीं खेल सकते हैं जो कि ठीक होने से पहले पूर्व परिवेश में इस तरह के अनुकूलित थे। लेकिन 4199 क्या करता है? यह सिर्फ सभी सुधारों को सक्षम करता है।