2013-02-08 14 views
11

मेरा वर्तमान प्रोजेक्ट निरंतर एक SQL सर्वर पर प्रश्न भेजेगा और यह स्मृति या CPU का 100% उपयोग कर सकता है।एक प्रश्न के साथ SQL सर्वर उपयोग का पता लगाना

  • मैं कैसे जांच कर सकते हैं सर्वर एक संग्रहीत प्रक्रिया में पूर्ण उपयोग पास आ रही है, ताकि मैं तय कर सकते हैं किसी तालिका में प्रश्नों कुछ सेटिंग्स पर अमल करने के लिए है कि क्या है या नहीं या बचाने के लिए इतना है कि निम्नलिखित प्रश्नों काम का बोझ पता कर सकते हैं उच्च है और तय करें कि

  • यदि नहीं, तो मैं SQL सर्वर को पूर्ण उपयोग तक कैसे पहुंच सकता हूं?

मामले के बारे में अधिक जानकारी: अभी मैं जानता हूँ कि हमारे वर्तमान परीक्षण सर्वर प्रति सेकंड 40-50 प्रश्नों (एक विशिष्ट संग्रहीत प्रक्रिया) को संसाधित कर सकते हैं। और अब हम तय करेंगे कि प्रत्येक सेकेंड में सर्वर पर कितने प्रश्न भेजे जाते हैं। यदि हम लंबे समय तक अपेक्षित से भी अधिक राशि निर्धारित करते हैं, तो अंततः प्रश्न वर्चुअल मेमोरी भर जाएंगे और क्लाइंट को समय-समय पर अपने एसक्यूएल सर्वर इंस्टेंस को पुनरारंभ करना होगा।

अपेक्षित परिणाम (इनाम शिकारी के लिए):

@memory_usage float, @cpu_usage float; /* in percentage */ 

कोई भी विचार स्वागत कर रहे हैं। धन्यवाद।

+9

समयपूर्व अनुकूलन सभी बुराइयों की जड़ है। – Andomar

+1

आपके प्रश्न के आधार पर मुझे लगता है कि मैं वापस कदम उठाऊंगा और वैकल्पिक दृष्टिकोण को देखूंगा। –

+1

सबसे पहले यदि आप अपने सर्वर पर वर्चुअल मेमोरी का उपयोग कर रहे हैं तो सुनिश्चित करें कि आपके इंस्टेंस में अधिकतम मेमोरी सेटिंग सेट है। एसक्यूएल सर्वर इसकी कैश मेमोरी को प्रबंधित करने में काफी अच्छा है, इसलिए आपको इंस्टेंस को फिर से शुरू करने की आवश्यकता नहीं है (इस विशेष समस्या के लिए) जब तक कि आप स्मृति नहीं ले रहे हैं कि ओएस को काम करने की आवश्यकता है। ओएस छोड़ने के लिए कितनी मेमोरी है, इस पर बहुत से लेख हैं, लेकिन आप यहां बीओएल देखकर शुरू कर सकते हैं: http://msdn.microsoft.com/en-us/library/ms178067.aspx। यह 2012 है लेकिन मुझे यकीन नहीं है कि आप किस संस्करण का उपयोग कर रहे हैं। –

उत्तर

1

कैसे एसक्यूएल में यह करने के लिए लेकिन आप हमेशा सी # में एक समारोह बनाने और उसके बाद के रूप में सीआरएल का उपयोग करके संग्रहीत प्रक्रिया इसे अपने एसक्यूएल सर्वर में उपलब्ध करा सकते हैं सुनिश्चित नहीं हैं।

http://msdn.microsoft.com/en-us/library/ms131094.aspx

5

एसक्यूएल सर्वर और ठीक धुन यह करने के प्रयास के किसी भी तरह के गहन उपयोग के लिए, मुझे लगता है कि (आभासी) मशीन एसक्यूएल सर्वर के लिए समर्पित है।

यह कहा है, मशीन के CPU और स्मृति चाल करना चाहिए इस्तेमाल किया की वर्तमान प्रतिशत रही:

CREATE PROCEDURE dbo.p_GetSystemUsage 
    @cpuUsage float out, -- % CPU usage 
    @memoryUsage float out -- % memory usage 
AS 
BEGIN 
    SET NOCOUNT ON; 

    /* 
    * % CPU usage 
    */ 

    SELECT TOP 1 
     @cpuUsage = 100 - r.SystemIdle 
    FROM (
     SELECT 
      rx.record.value('(./Record/@id)[1]', 'int') AS record_id, 
      rx.record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle 
     FROM (
      SELECT CONVERT(XML, record) AS record 
      FROM sys.dm_os_ring_buffers 
      WHERE 
       ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' AND 
       record LIKE '%<SystemHealth>%') AS rx 
     ) AS r 
    ORDER BY r.record_id DESC 

    /* 
    * % memory usage 
    */ 

    SELECT 
     @memoryUsage = 
      (((m.total_physical_memory_kb - m.available_physical_memory_kb)/
       convert(float, m.total_physical_memory_kb)) * 
      100) 
    FROM sys.dm_os_sys_memory m 
END 

कुछ बातें ध्यान रखें:

  • sys.dm_os_sys_memory मशीन के लिए एक अच्छा स्रोत है भौतिक स्मृति उपयोग। यह मशीन के पेज-फ़ाइल उपयोग के बारे में समान जानकारी प्रदान करता है। मेरे अनुभव में, इसकी जानकारी अक्सर बदलती है - दूसरे परिणामों के भीतर इसके खिलाफ कई प्रश्न अलग-अलग परिणाम देते हैं।
  • sys.dm_os_ring_buffers मशीन के सीपीयू उपयोग के लिए एक अच्छा स्रोत है, लेकिन यह जितनी बार मैंने देखा है उससे हर मिनट अपडेट नहीं किया जाता है। यदि आपको अधिक वास्तविक समय की जानकारी चाहिए तो शायद आप इसे प्रभावित कर सकते हैं।
  • sys.dm_os_ring_buffers में सीपीयू-उपयोग मान एक पूर्णांक है, लेकिन मैंने आपके स्पेक प्रति @cpuUsagefloat बनाया है। चूंकि संग्रहीत प्रो दो float पैरा का उपयोग करता है, इसलिए आप अपने कॉलर्स को बदले बिना एक अंशकालिक भाग प्रदान करने के लिए CPU-use निर्धारण को दोबारा कर सकते हैं।
+2

सीपीयू उपयोग काम नहीं किया - sys.dm_os_sys_memory उपयोगी है –

+0

यह सुनकर खुशी हुई कि मेमोरी-उपयोग की जांच में मदद मिलती है, @ उगुर गुमुशन। सीपीयू-उपयोग जांच किस तरह से काम नहीं करती? क्या यह त्रुटि हुई? शायद आपके पर्यावरण में काम करने के लिए एक साधारण समायोजन की आवश्यकता है। साथ ही, यह मुझे याद दिलाता है - आप किस SQL ​​सर्वर और ओएस संस्करण का उपयोग कर रहे हैं? ('@@ संस्करण 'के अनुसार, मैंने माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 आर 2 (एसपी 1) पर संग्रहीत प्रो की जांच की - 10.50.2500.0 (इंटेल एक्स 86) जून 17 2011 00:57:23 कॉपीराइट (सी) उन्नत सेवाओं के साथ माइक्रोसॉफ्ट कॉर्पोरेशन एक्सप्रेस संस्करण विंडोज एनटी 6.1 (बिल्ड 7601: सर्विस पैक 1)।) – J0e3gan

+2

हमारे पास कंपनी में एसक्यूएल सर्वर 2008r2 है .. cpuusage प्रत्येक बार –

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