2014-09-27 8 views
11

यह this question के रूप में शुरू हुआ लेकिन अब विशेष रूप से अधिक उचित रूप से पूछा जाता है क्योंकि मुझे एहसास हुआ कि यह एक डीटीयू संबंधित प्रश्न है।सरल चयन गिनती (आईडी) Azure SQL DTUs का 100% उपयोग करता है

मूल रूप से

, चल रहा है:

select count(id) from mytable 

संपादित करें: जहां खंड मदद करने के लिए प्रतीत नहीं होता है एक जोड़ा जा रहा है।

लेने है 8 और 30 मिनट के बीचचलाने के लिए (जबकि एसक्यूएल सर्वर की स्थानीय प्रतिलिपि पर समान क्वेरी बारे में 4 सेकंड लेता है)।

नीचे यह प्रश्न चलाने पर Azure पोर्टल में मॉनीटर टैब का स्क्रीन शॉट नीचे दिया गया है। नोट मैंने डेटाबेस को लगभग एक हफ्ते तक छूने के बाद ऐसा नहीं किया और Azure रिपोर्टिंग मैंने केवल अपने डीटीयू का 1% उपयोग किया था।

enter image description here

अतिरिक्त योग्य कुछ बातें: चलाने के लिए 27s:

  • इस विशेष परीक्षण में, क्वेरी ले लिया 08।
  • यह चल रहा था, उपरोक्त चार्ट वास्तव में एक अवधि के लिए डीटीयू लाइन 100% पर दिखाया।
  • डेटाबेस एस 1 प्रदर्शन स्तर के साथ मानक सेवा स्तर को कॉन्फ़िगर किया गया है।
  • डेटाबेस लगभग 3.3 जीबी है और यह सबसे बड़ी तालिका है (गणना लगभग 2,000,000 लौट रही है)।

मैं यह सिर्फ मेरी समझ सीमित हो सकता है, लेकिन अगर अगर यह वास्तव में अपेक्षित व्यवहार (अर्थात एक सरल गिनती इतने लंबे समय ले रही है चलाने के लिए और मेरे DTUs बाहर maxing) यह बहुत सराहना की जाएगी है किसी को स्पष्ट कर सकते सराहना करते हैं।

+0

मूल प्रश्न में दिए गए उत्तरों में पहले से ही क्या होता है। "सरल" गणना वास्तव में महंगी होती है, महंगी होती है और उसे पूरी तालिका को स्कैन करना पड़ता है। * ऐसा मत करो *। यदि आपके पास एक WHERE क्लॉज था जो अनुक्रमित फ़ील्ड का उपयोग करता है तो ऑप्टिमाइज़र इंडेक्स सेक ऑपरेशन का उपयोग करेगा जिसके परिणामस्वरूप बेहतर प्रदर्शन होगा। एक खोज कुल गणना (यानी बहुत कम आईओ, बेहतर गति) की गणना करने से पहले मिलान पंक्तियों को खोजने के लिए सूचकांक बी-ट्री को पढ़ती है। यदि आप उच्च चयन वाले क्षेत्र का उपयोग करते हैं तो आपको बहुत कम सूचकांक पृष्ठ पढ़ना होगा। –

+0

बस एफटीआर, 'सरल' गिनती नहीं है - यह मुझे अलग-अलग कहां के साथ/बिना करने की ज़रूरत है। – chrisb

+0

क्या आपने कभी एक संतोषजनक उत्तर प्राप्त किया है कि यह क्यों हो रहा है? मैं 550 मिलीग्राम पंक्तियों की एक तालिका के साथ एक 127 जीबी डेटाबेस पर एस 2 (50 डीटीयू) के साथ एक ही चीज़ देखता हूं, और गिनती (1) एक घंटे के करीब ले जाती है। –

उत्तर

-1

चयन गिनती

संकुल अनुक्रमणिका स्कैन करता है, तो एक ही उपलब्ध है और इसकी तारीख तक करना चाहिए। Azure SQL को स्वचालित रूप से आंकड़े अपडेट करना चाहिए, लेकिन अगर वे पूरी तरह से पुराने हैं तो इंडेक्स को स्वचालित रूप से पुनर्निर्माण नहीं करते हैं।

यदि उस तालिका में बहुत से INSERT/UPDATE/हटाए गए ट्रैफ़िक हैं, तो मैं सुझाव देता हूं कि मैन्युअल रूप से इंडेक्स को हर बार पुनर्निर्माण करें।

http://blogs.msdn.com/b/dilkushp/archive/2013/07/28/fragmentation-in-sql-azure.aspx

और इतना अधिक जानकारी

SQL Azure and Indexes

+0

धन्यवाद, मैं इंडेक्स का पुनर्निर्माण कर रहा हूं, मुझे लगता है कि मैं आपके द्वारा लिंक किए गए एमएसडीएन आलेख में एसक्यूएल का उपयोग कर रहा हूं। इस तालिका में एक क्लस्टरेड इंडेक्स प्रतीत होता है जो 0.2% खंडित है। तो जहां तक ​​मैं यह कह सकता हूं यह मुद्दा नहीं है। – chrisb

+0

@chrisb आप एक समेकित उदाहरण का उपयोग कर रहे हैं जिसके परिणामस्वरूप महंगा पढ़ा जाता है (आईओ शर्तों में)। यह वास्तविक प्रश्नों का प्रतिनिधि नहीं है। यदि आपने 'WHERE' क्लॉज प्रदर्शन में एक भी अनुक्रमित फ़ील्ड का उपयोग किया है तो –

+0

@chrisb मुझे लगता है कि यह वह जगह है जहां हमें आंकड़े और निष्पादन योजनाओं को देखने की आवश्यकता होगी। यहां मूलभूत मार्गदर्शिका है कि उन्हें कैसे चालू करें: http://www.solidq.com/tuning-sql-azure- डेटाबेस-part-1/ – b0rg

3

अपने previous question में क्वेरी आंकड़े से हम देख सकते हैं के लिए पोस्ट:

300ms CPU time 
8000 physical reads 

8:30 के बारे में 500sec है। हम निश्चित रूप से सीपीयू बाध्य नहीं हैं। 500sec से 300ms CPU लगभग कोई उपयोग नहीं है। हमें प्रति सेकेंड 16 भौतिक पढ़ते हैं। यह बहुत नीचे है कि कोई भी भौतिक डिस्क वितरित कर सकती है। इसके अलावा, तालिका को भौतिक आईओ की उपस्थिति से प्रमाणित रूप से पूरी तरह से कैश नहीं किया जाता है।

मैं कहूंगा कि आप थ्रॉटल हैं।प्रति मिनट

S1 corresponds

को

934 लेन-देन लेन-देन के कुछ परिभाषा के लिए। लगभग 15 ट्रांस/सेकंड है। हो सकता है कि आप लेनदेन प्रति एक भौतिक आईओ की सीमा को मार रहे हों ?! 15 और 16 संदिग्ध रूप से समान संख्या हैं।

इस सिद्धांत का परीक्षण उच्च स्तरीय कारक को अपग्रेड करके करें। You might find that SQL Azure Database cannot deliver the performance you want at an acceptable price.

आप यह भी होना चाहिए कि बार-बार एक तेजी से क्वेरी में स्कैनिंग तालिका के परिणाम की आधा क्योंकि आवंटित बफर पूल टेबल के सबसे फिट करने के लिए (बस नहीं इसके बारे में सब) लगता है।

+0

यहां आपके विश्लेषण के लिए धन्यवाद। मेरे पास यह सत्यापित करने का समय नहीं है (अगर/जब मैं करता हूं तो मैं इसे सही के रूप में चिह्नित करूंगा) लेकिन मुझे लगता है कि आप शायद यहां सही हैं - मुझे आश्चर्य हुआ कि एक साधारण गिनती ... जहां कई डीटीयू ले सकते हैं। मैं SQL सर्वर के इस तरफ से सुपर अनुभवी नहीं हूं, हालांकि यह कई लोगों के लिए स्पष्ट हो सकता है कि यह एक महंगा ऑपरेशन है। – chrisb

+0

"महंगा" परिभाषित करें। इसके लिए टेबल स्कैनिंग (या इसकी कुछ अनुक्रमणिका) की आवश्यकता होती है। मुझे लगता है कि यह समझ में आता है कि यह तालिका आकार के अनुपात में आईओ उत्पन्न करता है। यह नगण्य CPU लोड उत्पन्न करता है। – usr

+0

मुझे लगता है कि मेरा मतलब डीटीयू के मामले में महंगा है जो अनिवार्य रूप से आप विभिन्न Azure SQL स्तरों के साथ भुगतान कर रहे हैं। – chrisb

0

मुझे एक ही समस्या थी। तालिका पर फुलस्कैन के साथ आंकड़ों को अद्यतन करने से हल किया गया:

update statistics mytable with fullscan 
संबंधित मुद्दे