क्या आशावादी को अधिक या हर समय इसकी आवश्यकता देना संभव है?


18

यह देखते हुए कि ऑप्टिमाइज़र को अपनी ज़रूरत के सभी समय नहीं लग सकते (इसे निष्पादन समय को कम करना होगा और इसमें योगदान नहीं करना होगा) सभी संभावित निष्पादन योजनाओं का पता लगाने के लिए इसे कभी-कभी काट दिया जाता है।

मैं सोच रहा था कि क्या इसे ओवरराइड किया जा सकता है ताकि आप आशावादी को हर समय जरूरतों (या एक निश्चित मात्रा में मिलीसेकंड) दे सकें।

मुझे इसकी आवश्यकता नहीं है (एटीएम) लेकिन मैं एक ऐसे परिदृश्य की कल्पना कर सकता हूं जहां एक जटिल प्रश्न को एक तंग लूप में निष्पादित किया जाता है और आप इष्टतम योजना के साथ आना चाहते हैं और इसे हाथ से पहले कैश करना चाहते हैं।

बेशक, यह आपके पास एक तंग लूप है जिसे आपको क्वेरी को फिर से लिखना चाहिए ताकि यह चला जाए लेकिन मेरे साथ सहन करें।

यह जिज्ञासा से अधिक सवाल है और यह देखने के लिए भी कि क्या कभी-कभी एक छोटे से परिचालित अनुकूलन और एक पूर्ण के बीच अंतर होता है।

यह पता चला है कि आप अनुकूलक ध्वज 2301 के साथ अधिक समय दे सकते हैं। यह बिल्कुल वैसा नहीं है जैसा मैं पूछ रहा था बल्कि यह करीब आता है।

इस पर मुझे मिली सबसे अच्छी जानकारी इयान जोस द्वारा SQL Server 2005 SP1 में क्वेरी प्रोसेसर मॉडलिंग एक्सटेंशन में है

देखभाल के साथ इस ट्रेस ध्वज का उपयोग करें! लेकिन बेहतर योजनाओं के साथ आने पर यह उपयोगी हो सकता है। यह सभी देखें:

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

जवाबों:


16

झंडे का निशान 2301 के आगे, 8780 है जो वास्तव में अनुकूलक को 'कड़ी मेहनत' करता है क्योंकि यह सिर्फ इसे और अधिक समय देता है (असीमित नहीं, जैसा कि यहां विस्तार से बताया गया है (रूसी) और कम विस्तृत यहां ) अपनी बात करने के लिए।

रूसी लेख के मूल लेखक के अंग्रेजी में विस्तृत विवरण। जिसमें लेखक की अपनी चेतावनी शामिल है:

यह अनुशंसित नहीं है कि इसे उत्पादन में कभी उपयोग करें

दोनों को मिलाते हुए और 4-स्तरीय नेस्टेड इनलाइन TVFs की क्वेरी के लिए उन्हें (चुनिंदा तरीके से क्वेरी संकेत विकल्प (QUERYTRACEON 2301, QUERYTRACEON 8780 के माध्यम से) जोड़कर (जहां तल पर केवल कोई भी वास्तविक काम करेगा और ऊपरी स्तर परिणामों को सहसंबंधित करेगा) EXISTS उपशक्तियों के माध्यम से) एक अच्छी मेरिन जॉइन और कई LAZY SPOOLs के परिणामस्वरूप निष्पादन का समय आधे से कम हो गया।


4

नहीं, आप नहीं कर सकते।

आप अपने प्रश्नों को "ऑप्टिमाइज़र-फ्रेंडली" बना सकते हैं, यह समझ कर कि यह कैसे काम करता है (जटिल जानवर, इसे बाहर जानना आवश्यक नहीं है)। मेरा सुझाव है कि यदि आप इतने महत्वपूर्ण समय में कुछ करते हैं, तो SQL सर्वर संचालित करने के तरीके को बदलने के बजाय क्वेरी को ठीक करें।

उदाहरण के लिए, आप जानना चाहेंगे कि जब कोई क्वेरी O (n) की तुलना में डेटा वॉल्यूम + डेटा वितरण परिवर्तनों की तुलना में कम कुशलता से स्केलिंग करना शुरू करती है: ऑप्टिमाइज़र को अधिक समय देने से यहाँ कोई मूल्य नहीं जुड़ता है।

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