अनुमानित निष्पादन योजना प्रदर्शित करने से CXPACKET, PAGELATCH_SH, और LATCH_EX [ACCESS_METHODS_DATASET_PARENT] प्रतीक्षा करता है


13

मैं Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) को 4 vCPU VM पर max degree of parallelismसेट 2और cost threshold for parallelismसेट करने के साथ चला रहा हूं 50

सुबह में, जब एक चयन शीर्ष 100 क्वेरी के लिए अनुमानित निष्पादन योजना को प्रदर्शित करने की कोशिश की जाती है , तो मैं बड़े पैमाने पर इंतजार करता हूं और अनुमानित योजना को प्रस्तुत करने के लिए ऑपरेशन में 5 से 7 मिनट की रेंज में कई बार मिनट लगते हैं। फिर से, यह क्वेरी का वास्तविक निष्पादन नहीं है, यह केवल अनुमानित निष्पादन योजना को प्रदर्शित करने की प्रक्रिया है ।

sp_WhoIsActivePAGEIOLATCH_SHया तो इंतजार करता है या LATCH_EX [ACCESS_METHODS_DATASET_PARENT]इंतजार करता है और जब मैं ऑपरेशन के दौरान पॉल रान्डल के वेटिंग टास्क को चलाता हूं। एसक्यूएल स्क्रिप्ट में यह दिखाया जाता है कि वेट दिखातेCXPACKET हुए वर्कर थ्रेड्स के साथ PAGEIOLATCH_SHइंतजार करता है:

यहाँ छवि विवरण दर्ज करें

* संसाधन विवरण क्षेत्र = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen

कार्यकर्ता सूत्र पूरी statsतालिका को स्मृति में लाते हैं (जैसे कि पृष्ठ संख्याओं के साथ-साथ बाद के पृष्ठ संख्याओं में पॉल रैंडल की क्वेरी बिंदु से statsतालिका के लिए क्लस्टर कुंजी को दिखाया गया है )। एक बार जब योजना वापस आ जाती है, तो मूल रूप से यह शेष दिन के लिए तात्कालिक होता है, तब भी जब मैं statsकैश से तालिका के अधिकांश भाग को केवल विभिन्न रिकॉर्डों के साथ देखता हूं (जो मुझे लगता है कि इसी तरह के प्रश्नों के संचालन की तलाश के कारण खींचा गया था)।

मैं इस प्रारंभिक व्यवहार की उम्मीद करूंगा यदि क्वेरी वास्तव में SCAN ऑपरेटरों का उपयोग करने वाली योजना के साथ निष्पादित हो रही थी, लेकिन ऐसा तब क्यों हो रहा है जब निष्पादन योजनाओं का मूल्यांकन केवल SEEK ऑपरेटर पर पहुंचने के लिए किया गया है जैसा कि ऊपर दी गई योजना में दिखाया गया है? यहाँ प्रदर्शन को बेहतर बनाने में मदद करने के लिए मैं क्या कर सकता हूँ (कार्यालय समय से पहले इस कथन को चलाने से अलग) मैं मान रहा हूं कि अनुक्रमणिका को कवर करना फायदेमंद होगा, लेकिन क्या वे वास्तव में व्यवहार में किसी भी बदलाव की गारंटी देंगे? मुझे कुछ भंडारण और रखरखाव विंडो सीमाओं के भीतर काम करना होगा, और क्वेरी स्वयं एक विक्रेता समाधान से उत्पन्न होती है, इसलिए इस बिंदु पर किसी भी अन्य सुझाव (बेहतर अनुक्रमण के अलावा) का स्वागत किया जाएगा।

जवाबों:


13

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

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

एक्सएमएल में आपके द्वारा साझा की गई अनुमानित योजना के लिए, मैं आज सुबह से इन आंकड़ों के लिए एक साथ अपडेट की तारीखें देखता हूं:

LastUpdate="2019-05-06T09:12:49.92"
LastUpdate="2019-05-06T09:12:58.3"
LastUpdate="2019-05-06T09:13:20.33"
LastUpdate="2019-05-06T09:13:09.67"
LastUpdate="2019-05-06T09:12:59.05"
LastUpdate="2019-05-06T09:12:39.56"

यदि ये बहुत बड़े हैं, व्यस्त टेबल (संभवत: नमूने प्रतिशत के आधार पर लगता है), तो यह बहुत आश्चर्य की बात नहीं है कि आँकड़े अपडेट बहुत अधिक हॉर्स पावर ले रहे हैं।


9

जब मैं SSMS में लंबे समय से अनुमानित योजना समय देखता हूं तो यह संभावना के क्रम में निम्नलिखित में से एक है:

  1. क्वेरी ऑप्टिमाइज़र ने निर्णय लिया कि उसे आंकड़े बनाने या अपडेट करने की आवश्यकता है।
  2. अनुमानित योजना का आकार बहुत बड़ा है (कहते हैं,> 10 एमबी) और इसे प्रदर्शित करने के लिए एसएसएमएस को बस एक लंबा समय लगता है।
  3. एक अच्छी पर्याप्त योजना की तलाश में CPU उपयोग के कारण क्वेरी संकलन का वास्तव में एक लंबा समय लगा।
  4. सर्वर अत्यधिक दबाव में है। उदाहरण के लिए, मुझे गेटवे के उपलब्ध होने का इंतजार करना पड़ सकता है ।
  5. विभिन्न बग जो बहुत लंबे समय तक चलने वाले संकलन का नेतृत्व करते हैं।

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

यहाँ छवि विवरण दर्ज करें

नए योगदानकर्ता जोश डारनेल ने एक्सएमएल में आंकड़ों के लिए अंतिम अद्यतन समय के साथ एक अच्छा सुराग भी बताया।

SQL सर्वर 2019 एक नया प्रतीक्षा प्रकार, WAIT_ON_SYNC_STATISTICS_REFRESH का परिचय देता है , जब प्रश्नों के लिए आँकड़े अद्यतन पर प्रतीक्षा कर रहे हैं। उस संस्करण पर इस समस्या का निदान करना बहुत आसान है। तब तक आपको केवल अप्रत्यक्ष तकनीकों पर निर्भर रहना होगा।

वर्कअराउंड में रखरखाव अवधि के दौरान आंकड़े अपडेट करना या डेटाबेस के लिए ऑटो अपडेट आँकड़े Async को सक्षम करना शामिल है। कृपया इसे बदलने से पहले उस विकल्प के पूर्ण प्रभावों को समझें। आँकड़ों के अद्यतन के बाद आँकड़ों को अद्यतन करने से पहले क्वेरी योजना बनाई जाएगी। कुछ वर्कलोड के लिए जो एक बड़ी जीत हो सकती है। दूसरों के लिए यह अच्छे से अधिक नुकसान कर सकता है।

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