SQL सर्वर क्वेरी डिस्क I / O के 7MB / सेकंड से अधिक का उपयोग क्यों नहीं करते हैं


11

मेरे पास एक SSD है, जो IOmeter परीक्षण का उपयोग करते हुए, 200 एमबी / एस से अधिक प्रदर्शन दिखाता है। हालाँकि जब मैं स्थानीय मशीन से कोई SQL क्वेरी चलाता हूँ, तो विंडोज़ संसाधन मॉनिटर 7MB / सेकंड के ऊपर डिस्क IO को कभी नहीं दिखाता है। यह उन प्रश्नों के लिए भी सही है, जिन्हें चलाने में 2 मिनट लगते हैं। अड़चन क्या हो सकती है कि यह केवल एसएसडी से 7 एमबी / सेकंड का उपयोग कर रहा है?

मैं चल रहा हुँ:

  • विंडोज सर्वर 2012 मानक
  • SQL सर्वर 2008 r2
  • इंटेल i7 3820
  • 32GB RAM
  • सैंडिस्क एसएसडी

2
शायद डेटा पहले से ही रैम में है और डिस्क एक्सेस की आवश्यकता नहीं है?
gbn

1
@DeanMacGregor - आप परिणामों का उपभोग कैसे कर रहे हैं? यदि SSMS में यदि आप परिणामों को छोड़ने का विकल्प आजमाते हैं तो क्या होगा। क्या वह कुछ बदलता है? इसके अलावा आप यह देखने की कोशिश कर सकते हैं sys.dm_os_waiting_tasksकि क्वेरी चल रही है या नहीं यह देखने के लिए कि क्या अन्य प्रतीक्षा प्रकार हैं।
मार्टिन स्मिथ

1
क्या रैंडम एक्सेस रीड्स (4 केबी ब्लॉक के लिए रैंडम रीड्स) के लिए 200 एमबी / एस है? मुझे लगता है कि यह वही है जो एक डेटाबेस आमतौर पर करता है। क्या क्वेरी डिस्क (अस्थायी फ़ाइल, अस्थायी परिणाम सेट या तालिका) पर लिखती है?

2
@DeanMacGregor - तो समीकरण से बाहर निकालने के लिए आप स्केलर चर (उदाहरण क्वेरी) के लिए परिणाम असाइन कर सकते हैं। DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values। इसलिए ग्राहक को कोई परिणाम वापस नहीं भेजा जाता है लेकिन योजना और IO अभी भी समान होंगे।
मार्टिन स्मिथ

4
मान लें कि आप ASYNC_NETWORK_IO की व्याख्या कर रहे हैं इसका मतलब है कि समस्या नेटवर्क से संबंधित है? यह (आम तौर पर) नहीं है। यह सबसे अधिक संभावना है, क्योंकि @MartinSmith ने सुझाव दिया है (दो बार) कि SSMS या आपके द्वारा उपयोग किए जा रहे एप्लिकेशन परिणामों का उपभोग नहीं कर रहे हैं क्योंकि SQL उन्हें सेवा दे रहा है। पंक्तियों की खपत को छोड़ने के सुझाए गए तरीकों में से किसी एक का पालन करें और आपको अधिकतम IO थ्रूपुट की एक सच्ची (r) तस्वीर मिलेगी।
मार्क स्टोरी-स्मिथ

जवाबों:


7

टिप्पणियों की श्रृंखला से, ऐसा लगता है कि आप ASYNC_NETWORK_IOप्रतीक्षा कर रहे हैं इसका मतलब है कि समस्या नेटवर्क से संबंधित है। यह (आम तौर पर) नहीं है।

जैसा कि @MartinSmith ने (दो बार) संकेत दिया है कि एसएसएमएस या जिस अनुप्रयोग का आप SQL सर्वर द्वारा सेवा कर रहे हैं, वे जितनी तेजी से परिणामों का उपभोग नहीं कर रहे हैं, उसके लिए सबसे अधिक संभावना है। अपने माप से पंक्तियों की खपत को हटाने के लिए सुझाए गए तरीकों में से किसी एक का पालन करें और आपको अधिकतम IPS थ्रूपुट की एक सच्ची (r) तस्वीर मिलेगी:

यदि आप पहले से ही नहीं हैं, तो आपको स्पष्ट रूप DBCC DROPCLEANBUFFERSसे यह सुनिश्चित करने की आवश्यकता होगी कि डेटा वास्तव में बफर कैश के बजाय डिस्क से पढ़ा जाए। "केवल परीक्षण पर, एक सक्रिय लाइव वातावरण में ऐसा न करें" इत्यादि के क्रमिक तरीके लागू होते हैं।

अपने अन्य टिप्पणियों के एक जोड़े पर सम्मान:

9 मिलियन पंक्तियों को लौटाने वाली क्वेरी निष्पादित करते समय CPU उपयोग, लगभग 13% रह जाएगा, जो कि sqlserver के कारण 9% है ... क्या यह 3 मिनट से अधिक तेज परिणाम नहीं देगा यदि सभी डेटा RAM में था?

हम वास्तव में यहाँ क्या परीक्षण कर रहे हैं, कैसे और क्यों? यदि आपकी 9 मिलियन पंक्ति की क्वेरी कुछ और है SELECT * FROM dbo.SomeTableतो 1001 कारक हैं जो खेलने के लिए आते हैं, केवल कच्चे IO थ्रूपुट के अलावा।

आपका इंटेल I7-3820 एक 4-कोर प्रोसेसर है। यदि आपकी परीक्षण क्वेरी समानांतर योजना नहीं बनाती है, तो मुझे आश्चर्य होगा कि यदि आप सिस्टम से 20% से अधिक सीपीयू का उपयोग कर सकते हैं।

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

मैं सुझाव देता हूँ:

  1. SELECT *SQL सर्वर के माध्यम से सिर्फ IO का परीक्षण करने के लिए ।
  2. अपनी क्वेरी के निष्पादन की योजना के साथ नया प्रश्न यदि आप खुदाई करना चाहते हैं कि यह IO को संतृप्त क्यों नहीं करता है।

वास्तव में यह dbo.sometable से सिर्फ चयन * है। खेद है कि मैंने इसका ज़िक्र जल्दी नहीं किया; मेरा मतलब था कि मैं किसी भी तालिका से उस क्वेरी को चला सकता हूं। मेरे प्रश्न की उत्पत्ति यह थी कि मैंने देखा कि मेरी डिस्क आईओ साधारण से बहुत कम थी "मुझे बहुत सारे डेटा दें" क्वेरी। मेरी मुख्य चिंता यह थी कि यदि डिस्क IO बहुत कम है तो प्रदर्शन को बेहतर बनाया जा सकता है यदि कम डिस्क IO का मूल कारण निहित था।
डीन मैकग्रेगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.