ट्रेस ध्वज 4199 - विश्व स्तर पर सक्षम करें?


19

यह राय की श्रेणी में आ सकता है, लेकिन मुझे उत्सुकता है अगर लोग SQL सर्वर के लिए स्टार्टअप पैरामीटर के रूप में ट्रेस ध्वज 4199 का उपयोग कर रहे हैं । उन लोगों के लिए जिन्होंने इसका उपयोग किया है, आपने किन परिस्थितियों में क्वेरी प्रतिगमन का अनुभव किया?

यह निश्चित रूप से बोर्ड भर में एक संभावित प्रदर्शन लाभ की तरह लगता है, मैं इसे अपने गैर-उत्पादन वातावरण में विश्व स्तर पर सक्षम करने पर विचार कर रहा हूं और किसी भी मुद्दे को दूर करने के लिए इसे कुछ महीनों के लिए बैठने दूंगा।

2014 (या 2016) में डिफ़ॉल्ट रूप से 4199 में फिक्सर्स को ऑप्टिमाइज़र में रोल किया गया? हालांकि मैं अप्रत्याशित योजना परिवर्तनों को पेश नहीं करने के मामले को समझता हूं, इन सभी सुधारों को संस्करणों के बीच छिपाकर रखना अजीब लगता है।

हम 2008, 2008R2 और ज्यादातर 2012 का उपयोग कर रहे हैं।


क्या आप वर्तमान में कार्डिनैलिटी अनुमान के मुद्दों या कुछ का सामना कर रहे हैं?
ज़ेन

क्या आपने ध्वज द्वारा सक्षम परिवर्तनों के माध्यम से यह देखने के लिए पढ़ा है कि क्या वे आपके लिए लाभकारी होंगे?
स्वैसेक

मैं उनके माध्यम से पढ़ रहा हूं, विशेष रूप से कई प्रासंगिक, बहु-स्तंभ जुड़ते हैं।
FilamentUnities

जवाबों:


20

व्यक्तिगत रूप से, जब भी मैं एक नई परियोजना के लिए एक नया सर्वर बनाता हूं तो मैं हमेशा विश्व स्तर पर TF4199 को सक्षम करता हूं। वही लागू होता है जब मैं मौजूदा उदाहरणों को नए संस्करणों में अपग्रेड करता हूं।

TF नए सुधारों को सक्षम करता है जो अनुप्रयोग के व्यवहार को प्रभावित करेगा, लेकिन नई परियोजनाओं के लिए प्रतिगमन का जोखिम कोई मुद्दा नहीं है। पिछले संस्करणों से उन्नत उदाहरणों के लिए, पुराने और नए संस्करण के बीच अंतर अपने आप में एक चिंता का विषय है और योजना प्रतिगमन से निपटने के लिए वैसे भी उम्मीद की जाती है, इसलिए मैं TF4199 सक्षम के साथ इसके साथ लड़ना पसंद करता हूं।

जहाँ तक मौजूदा डेटाबेस का सवाल है, यह जानने का एक ही तरीका है: इसका परीक्षण करें। आप मौजूदा सेटअप पर वर्कलोड को कैप्चर कर सकते हैं और ध्वज को सक्षम करने के बाद इसे फिर से चला सकते हैं। आरएमएल यूटिलिटीज आपको इस जवाब में वर्णित प्रक्रिया को स्वचालित करने में मदद कर सकता है

जाहिर है, ध्वज पूरे उदाहरण को प्रभावित करता है, इसलिए आपको वहां बैठे सभी डेटाबेस का परीक्षण करना होगा।


12
यह भी नोट करना महत्वपूर्ण है कि सभी 4199 सुधारों को SQL सर्वर 2016 (ट्रेस ध्वज के बिना) में चालू किया जाएगा। 4199 अभी भी काम करेगा, लेकिन केवल उस बिंदु से आगे नए सुधार को सक्षम करेगा।
हारून बर्ट्रेंड

6

विषय पर मेरी खोज मुझे यहाँ ले आई, इसलिए मैं इस विषय पर अपना हालिया अनुभव साझा करना चाहूंगा।

मैं एसक्यूएल 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 क्या करता है? यह सिर्फ सभी सुधारों को सक्षम करता है।


1

मैं अपना अनुभव ट्रेस ध्वज 4199 के साथ साझा करना चाहता था।

मैंने SQL Server 2012 SP3 चलाने वाले ग्राहक सिस्टम पर प्रदर्शन समस्या का निदान करना अभी-अभी समाप्त किया है। ग्राहक अपने उत्पादन OLTP सर्वर से एक नए सर्वर पर रिपोर्टिंग डेटाबेस को ले जा रहा था। ग्राहक का लक्ष्य OLTP प्रश्नों के साथ संसाधनों के लिए प्रतिस्पर्धा को दूर करना था। दुर्भाग्य से, ग्राहक ने कहा कि नया रिपोर्टिंग सर्वर बहुत धीमा था।

OLTP सिस्टम पर एक नमूना क्वेरी रन 1.6 सेकंड में पूरा हुआ। क्वेरी प्लान ने ~ 200 मिलियन रो टेबल पर एक इंडेक्स की तलाश की जो एक दृश्य का हिस्सा था।

नए सर्वर पर, उसी क्वेरी को 10 मिनट 44 सेकंड में पूरा किया गया। इसने ~ 200 मिलियन रो टेबल पर एक इंडेक्स स्कैन किया।

रिपोर्टिंग सर्वर डेटा ओएलटीपी डेटा की एक प्रति थी, इसलिए यह डेटा में अंतर नहीं दिखाई देता था।

मुझे तब तक स्टंप किया गया जब तक मुझे याद नहीं आया कि हमारे सॉफ्टवेयर (जो कि उनके ओएलटीपी सिस्टम को चलाता है) ने स्टार्टअप पर कुछ ट्रेस झंडे सक्षम किए। उनमें से एक, 4199, मुझे याद आया कि एक क्वेरी ऑप्टिमाइज़र फिक्स था।

मैंने ग्राहक के नए रिपोर्टिंग सर्वर पर ट्रेस ध्वज 4199, और रिपोर्टिंग क्वेरी को 0.6 सेकंड में पूरा करने में सक्षम करने का परीक्षण किया। (वाह!) मैंने ट्रेस ध्वज को निष्क्रिय कर दिया, और क्वेरी 10 मिनट 44 सेकंड में पूरा करने के लिए वापस आ गई थी। ध्वज को सक्षम किया: 0.6 सेकंड पर वापस। जाहिरा तौर पर, ट्रेस ध्वज को सक्षम करने से ऑप्टिमाइज़र को 200 मिलियन रो टेबल पर दृश्य में एक इंडेक्स सीक का उपयोग करने में सक्षम किया गया।

इस स्थिति में, ट्रेस ध्वज 4199 द्वारा सक्षम क्वेरी ऑप्टिमाइज़ेशन ने एक बड़ा अंतर बना दिया। आपके अनुभव अलग-अलग हो सकते हैं। हालांकि, इस अनुभव के आधार पर, यह निश्चित रूप से मेरे लिए सक्षम होने के लायक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.