2008-10-02 10 views
41

मैंने कभी MAXDOP के उपयोग को स्पष्ट रूप से समझ नहीं लिया है। मुझे पता है कि यह क्वेरी को तेज़ी से बनाता है और यह आखिरी वस्तु है जिसे मैं क्वेरी ऑप्टिमाइज़ेशन के लिए उपयोग कर सकता हूं।SQL सर्वर में OPTION (MAXDOP 1) का उपयोग करने का उद्देश्य क्या है?

लेकिन, मेरा सवाल यह है कि कब और कहां यह सबसे अच्छा एक प्रश्न में उपयोग करने के लिए अनुकूल है?

+1

में उल्लेख कर रहे आप एसक्यूएल सर्वर संस्करण और सर्विस पैक शामिल होना चाहिए। यह बाद के संस्करण में तय किया गया हो सकता है ... –

उत्तर

18

यह एसक्यूएल सर्वर में समानता पर एक सामान्य पर्यटन है, यह आपके सवाल का सीधे जवाब नहीं हो सकता है।

पुस्तकें ऑनलाइन से, MAXDOP पर:

क्वेरी प्रोसेसर एक भी सूचकांक बयान निष्पादित करने के लिए उपयोग कर सकते हैं प्रोसेसर की अधिकतम संख्या सेट करता है। प्रोसेसर का उपयोग वर्तमान सिस्टम वर्कलोड के आधार पर किया जा सकता है।

Rickie Lee's blog समानांतरवाद और CXPACKET प्रतीक्षा प्रकार पर देखें। यह काफी दिलचस्प है।

आम तौर पर, एक ओएलटीपी डेटाबेस में, मेरी राय यह है कि यदि कोई प्रश्न इतना महंगा है तो इसे कई प्रोसेसर पर निष्पादित करने की आवश्यकता है, क्वेरी को और अधिक कुशलता में फिर से लिखा जाना चाहिए।

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

20

रूप Kaboing उल्लेख किया है, MAXDOP(n) वास्तव में सीपीयू कोर कि क्वेरी प्रोसेसर में इस्तेमाल किया जा रहा है की संख्या नियंत्रित करता है।

एक पूरी तरह से निष्क्रिय प्रणाली पर, एसक्यूएल सर्वर जितनी जल्दी संभव हो स्मृति में टेबल खींच और स्मृति में उन दोनों के बीच में शामिल होने का प्रयास करेंगे। यह हो सकता है कि, आपके मामले में, एक सिंगल सीपीयू के साथ ऐसा करना सबसे अच्छा है। इसका OPTION (FORCE ORDER) का उपयोग करने के समान प्रभाव हो सकता है जो आपके द्वारा निर्दिष्ट किए गए जोड़ों के क्रम का उपयोग करने के लिए क्वेरी ऑप्टिमाइज़र को मजबूर करता है। कुछ मामलों में, मैंने OPTION (FORCE PLAN) को 26 सेकंड से निष्पादन समय के 1 सेकंड तक एक क्वेरी को कम किया है। मौजूदा प्रणाली काम का बोझ के आधार पर उपलब्ध CPU की वास्तविक संख्या का उपयोग करता है -

0:

पुस्तकें ऑनलाइन कहना है कि MAXDOP के लिए संभावित मान हैं पर चला जाता है। यह डिफ़ॉल्ट मान और अनुशंसित सेटिंग है।

1 - समांतर योजना निर्माण को दबाता है। ऑपरेशन क्रमशः निष्पादित किया जाएगा।

2-64 - निर्दिष्ट मूल्य पर प्रोसेसर की संख्या सीमित करता है। वर्तमान वर्कलोड के आधार पर कम प्रोसेसर का उपयोग किया जा सकता है। यदि उपलब्ध CPUs की संख्या से बड़ा मान निर्दिष्ट किया गया है, तो उपलब्ध CPUs की वास्तविक संख्या का उपयोग किया जाता है।

मुझे यकीन है कि क्या MAXDOP का सबसे अच्छा उपयोग है नहीं कर रहा हूँ, हालांकि मैं एक अनुमान ले जाएगा और कहते हैं कि अगर आप इसे पर 8 विभाजन के साथ एक मेज है, तो आप MAXDOP(8) निर्दिष्ट करना चाहते हैं मैं के कारण/हे सीमाएं, लेकिन मैं गलत हो सकता था।

यहाँ कुछ त्वरित लिंक मैंने पाया MAXDOP के बारे में कर रहे हैं:

Books Online: Degree of Parallelism

General guidelines to use to configure the MAXDOP option

3

असामान्य इनपुट के साथ एसक्यूएल सर्वर में parallization कीड़े के एक जोड़े हैं। विकल्प (MAXDOP 1) उन्हें हटा देगा।

संपादित करें: पुराना। मेरा परीक्षण काफी हद तक एसक्यूएल 2005 पर किया गया था। इनमें से अधिकतर अब मौजूद नहीं हैं, लेकिन हर बार थोड़ी देर में हम इस धारणा पर सवाल करते हैं कि SQL 2014 कुछ गूंगा करता है और हम पुराने तरीके से वापस जाते हैं और यह काम करता है। हमने कभी यह प्रदर्शित करने में कामयाब नहीं रहा कि यह हाल के मामलों में सिर्फ एक खराब योजना निर्माण नहीं है, हालांकि नए संस्करणों में पुराने तरीके से सही तरीके से प्राप्त करने के लिए SQL सर्वर पर भरोसा किया जा सकता है। चूंकि सभी मामले आईओ बाध्य प्रश्न थे MAXDOP 1 चोट नहीं पहुंचाता है।

+1

क्या आप उन बग्स को विस्तृत कर सकते हैं? –

+2

मैं पूरी तरह से बग को अर्हता प्राप्त करने में असमर्थ था, लेकिन विशेष रूप से एक: जब बाएं से जुड़ने की पंक्तियों की बहुत कम% मिलान होने की उम्मीद थी, तो दोनों सारणी और लूप को समानांतरता के साथ बुकमार्क लुकअप के बजाय शामिल करने का प्रयास किया जाएगा। – Joshua

+0

@ जोशुआ, क्या आप जानते हैं कि बग अभी भी SQL 2012, 14 या 16 संस्करणों के लिए प्रासंगिक हैं? – HappyTown

6

एक अलग रूप में के बारे में कुछ के रूप में, MAXDOP जाहिरा तौर पर एक समाधान के रूप एक संभावित बुरा बग के लिए इस्तेमाल किया जा सकता है:

Returned identity values not always correct

+0

+1 अगर आप पहले से ही नहीं हैं तो मैं इसे अभी पोस्ट कर दूंगा ... – takrl

+0

लिंक डाउन है - [दर्पण] (https: //web.archive।org/वेब/20130412223343/https: //connect.microsoft.com/SQLServer/feedback/details/328811/scope-identity-sometimes-returns-incorrect-value) – user2426679

0

एक प्रदर्शन मुद्दा मैंने देखा के आधार पर मेरे दो सेंट जोड़ना,।

यदि सरल प्रश्न अनावश्यक रूप से पेरेलेलाइज्ड हो रहे हैं, तो यह एक को हल करने से अधिक समस्याएं ला सकता है। हालांकि, "knee-jerk" फिक्स के रूप में क्वेरी में MAXDOP जोड़ने से पहले, कुछ सर्वर सेटिंग्स जांचने के लिए हैं।

Jeremiah Peschka - Five SQL Server Settings to Change, MAXDOP और "PARALLELISM के लिए लागत थ्रेसहोल्ड" (CTFP) को जांचने के लिए महत्वपूर्ण सेटिंग्स के रूप में वर्णित हैं।

नोट: पॉल व्हाइट max server memoryPerformance problem after migration from SQL Server 2005 to 2012 के जवाब में, जांच करने के लिए सेटिंग के रूप में उल्लिखित है। पढ़ने के लिए एक अच्छा केबी आलेख Using large amounts of memory can result in an inefficient plan in SQL Server

Jonathan Kehayias - Tuning ‘cost threshold for parallelism’ from the Plan CacheCTFP के लिए अच्छा मूल्य खोजने में मदद करता है।

Why is cost threshold for parallelism ignored?

Aaron Bertrand - Six reasons you should be nervous about parallelism कुछ परिदृश्य में जहाँ MAXDOP हल है के बारे में चर्चा है।

समानता बाधा अवयव Paul White - Forcing a Parallel Query Execution Plan

संबंधित मुद्दे