SQL सर्वर में निष्पादन योजना कैसे निर्धारक है?


13

निम्नलिखित स्थिरांक को देखते हुए:

  • समान संरचना (टेबल, इंडेक्स, आदि) के साथ एक ही डेटाबेस
  • वही डेटा
  • समान SQL सर्वर और हार्डवेयर कॉन्फ़िगरेशन
  • वही आँकड़े
  • क्लाइंट में समान सेट विकल्प
  • समान SQL सर्वर संस्करण
  • वही ट्रेस झंडे

इन स्थिरांक को देखते हुए, क्या SQL सर्वर हमेशा दिए गए क्वेरी के लिए एक ही योजना का उत्पादन करेगा?

यदि नहीं, तो क्या अन्य विचार हैं? वहाँ भी nondeterminism का एक तत्व के रूप में अच्छी तरह से विचार करने के लिए है?


एक ही योजना कहना गलत होगा, लेकिन हम ऐसी ही योजना कह सकते हैं। बाहरी कारकों के साथ जो डीबीए / डेवलपर नियंत्रित कर सकते हैं; "क्वेरी प्लान ऑप्टिमाइज़िंग एल्गोरिदम" और "आंतरिक क्वेरी लागत एल्गोरिदम" SQL सर्वर इंजन के अंदर लिखे गए हैं। हमारे पास सभी तरीकों से "चुनने के लिए" बताने का नियंत्रण नहीं है। हम सबसे अच्छा चुनने के लिए इंजन को गाइड करने के लिए बाहरी एनवी सेट कर सकते हैं। किसी दिए गए प्रश्न के लिए, यदि ऑप्टिमाइज़र दो निष्पादन योजना के साथ आया है, जो 0.001 लागत अंतर बताता है, तो मुझे लगता है कि यह अप्रासंगिक होगा कि यह निष्पादन योजना क्या चुनेगी।
अनूप शाह

मुझे नहीं लगता कि आपको इस बारे में सैद्धांतिक होना चाहिए। मैंने विभिन्न डेटाबेस के साथ 25 साल काम किया है और बेहतर निष्पादन के लिए एक क्वेरी को फिर से लिखना हमेशा संभव है। और कभी-कभी यह समझने में बहुत मुश्किल है कि क्वेरी लिखने के एक तरीके के साथ इसका बेहतर क्यों है।

जवाबों:


13

इन स्थिरांक को देखते हुए, क्या SQL सर्वर हमेशा दिए गए क्वेरी के लिए एक ही योजना का उत्पादन करेगा? यदि नहीं, तो क्या अन्य विचार हैं? वहाँ भी nondeterminism का एक तत्व के रूप में अच्छी तरह से विचार करने के लिए है?

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

कैविएट: यह सच है बशर्ते आपकी सूची में 'समान' शब्द का अर्थ सभी तरह से समान हो । उदाहरण के लिए, 'समान' आंकड़े दो प्रणालियों पर मौजूद हो सकते हैं, लेकिन वे केवल एक ही हैं यदि हिस्टोग्राम कदम और घनत्व की जानकारी समान है

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

एक बात जो मैं आपकी सूची में जोड़ना चाहूंगा, वह यह है कि कोई भी योजना गाइड दूसरे डेटाबेस में मौजूद है।


GETDATE()प्रश्नों में गैर-नियतात्मक कार्यों का उपयोग करने का मतलब हो सकता है कि आपको एक अलग योजना भी मिल जाए। जबकि मुख्य अनुकूलक सीधे मूल्य का उपयोग नहीं करता है, कार्डिनैलिटी आकलन (कार्डिनैलिटी अनुमान के दौरान लगातार तह और अभिव्यक्ति का मूल्यांकन देख सकता है )। यदि यह अंतर वर्ग प्रश्न के दायरे में आता है तो मैं अनिश्चित हूं, क्योंकि दोनों प्रणालियां एक ही योजना का उत्पादन करेंगी यदि एक ही समय में निष्पादित किया जाता है (या, आमतौर पर, एक ही इनपुट चर, मापदंडों और फ़ंक्शन मानों के साथ)।

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