प्रबंधन स्टूडियो सिस्टम .OutOfMemoryException


38

मैं Microsoft SQL Server 2012 का उपयोग कर रहा हूं और प्रबंधन स्टूडियो के भीतर इसके खिलाफ एक सरल क्वेरी चलाने की कोशिश कर रहा हूं। मुझे निम्नलिखित त्रुटि (SSMS में, सर्वर पर चल रही है) मिल रही है:

बैच निष्पादित करते समय एक त्रुटि हुई। त्रुटि संदेश है: 'System.OutOfMemoryException' प्रकार का अपवाद फेंका गया था।

सिस्टम में 24GB RAM स्थापित है लेकिन कार्य प्रबंधक में देख रहे हैं sqlservr.exe प्रक्रिया केवल 2.9GB का उपयोग कर रही है।

कहीं एक सेटिंग है जो इसके रैम उपयोग को प्रतिबंधित कर रही है?

जवाबों:


39

यह त्रुटि इंगित करती है कि प्रबंधन स्टूडियो स्मृति से बाहर चल रहा है, SQL सर्वर सेवा नहीं। भले ही आपने 64 बिट SQL सर्वर स्थापित किया हो, लेकिन SQL सर्वर प्रबंधन स्टूडियो निष्पादन योग्य 32 बिट अनुप्रयोग है।

यह परिणाम सेट के आकार के कारण होता है जो आप प्रबंधन स्टूडियो में वापस आ रहे हैं। क्या आप सेलेक्ट * से कुछ ऐसा निष्पादित कर रहे हैं जो वास्तव में_बिज_टेबल है? अधिक के लिए http://support.microsoft.com/kb/2874903 देखें ।


19

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

लेकिन मैं एक अन्य समस्या का समाधान करना चाहता हूं: स्मृति SQL सर्वर का उपयोग कर रहा है की मात्रा का आकलन करने के लिए कार्य प्रबंधक का उपयोग करना। यह मत करो; यह एक साहसिक सामना करना पड़ा है। इस उत्तर से नकल करना (आपका प्रश्न दो-गुना है, इसलिए मैं वास्तव में इसे डुप्लिकेट के रूप में बंद नहीं कर सकता):


आप बता सकते हैं, कभी भी टास्क मैनेजर आपको विश्वास नहीं दिलाता है कि SQL सर्वर कितनी मेमोरी का उपयोग कर रहा है। इसके लिए कार्य प्रबंधक का उपयोग करना बंद करें, अवधि। प्रदर्शन काउंटर का उपयोग करें - आप DMV का उपयोग करके प्रदर्शन काउंटर को क्वेरी भी कर सकते हैं:

SELECT object_name, cntr_value 
  FROM sys.dm_os_performance_counters
  WHERE counter_name = 'Total Server Memory (KB)';

आप टूल> विकल्प> पर्यावरण> कीबोर्ड> क्वेरी शॉर्टकट में क्वेरी शॉर्टकट के रूप में सहेज सकते हैं, और कार्य प्रबंधक से गलत परिणाम प्राप्त करने की तुलना में क्वेरी विंडो में सटीक परिणाम प्राप्त कर सकते हैं।

आप इन प्रश्नों का उपयोग करके मेमोरी प्रेशर की जांच कर सकते हैं (और क्या आप इसके बारे में कुछ भी कर सकते हैं):

SELECT object_name, cntr_value
  FROM sys.dm_os_performance_counters
  WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_kb FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

EXEC sp_configure 'max server memory';

उपरोक्त कमांड SQL के नए संस्करणों के लिए हैं। SQL 2008 R2 सर्वरों के लिए फिर वहां के कमांड थोड़े अलग होते हैं। बीमार उन सर्वरों के लिए इस पोस्ट के नीचे एक और पोस्ट जोड़ दें क्योंकि टिप्पणियों का पालन करने के लिए अच्छी तरह से प्रारूप नहीं दिया गया है
डेविड ब्रिज

15

मेरे साथ भी ऐसा ही हुआ था। मेरा SQL सर्वर प्रबंधन स्टूडियो कुछ दिनों के लिए खुला था। मैंने इसे फिर से शुरू किया और यह हल हो गया।


9

मैंने पाया कि IntelliSense ने मदद करना बंद कर दिया है। मैं आपके पास किसी भी ऐड-इन्स की जाँच करने की सलाह देता हूँ (RedGate टूल्स और ApexSQL जैसी चीजें भी मेरे लिए समस्या को बढ़ा देती हैं)।

इस मुद्दे ने मुझे अब दिनों के लिए त्रस्त कर दिया और ईमानदार होने के लिए यह माइक्रोसॉफ्ट के काफी कमजोर है। हमारे पास वास्तव में 64 बिट उपकरण सेट होना चाहिए, क्योंकि हम इन दिनों बड़े डेटा के साथ काम कर रहे हैं, 64 बिट सर्वर, और डेस्कटॉप वातावरण।


1
मेरे मामले में RedGate SQL Prompt, intellisense में बने SSMS के साथ लड़ रहा था। SSMS इंटेलीजेंस को बंद करने से SQL प्रॉम्प्ट का काम बहुत बेहतर हो गया।
टीटीटी

1

SQL 2008 R2 के लिए मेमोरी क्वेरी कमांड (हारून बर्ट्रेंड के पोस्ट से) निम्नानुसार हैं

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)';

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

यह भी ध्यान दें कि कमांड

EXEC sp_configure 'max server memory';

जब तक आपके पास उन्नत विकल्प सक्षम न हों, तब तक काम नहीं कर सकते। जैसे यह पहले करो

EXEC sp_configure 'show advanced options',1
RECONFIGURE

1

कृपया ध्यान दें कि एसएसएमएस मेमोरी लीक होने के रूप में इसके लिए एक Microsoft कनेक्ट मुद्दा है। उन्हें लगता है कि उन्होंने इसे v16.5 में हल किया

यहां क्लिक करके Connect.microsoft.com पर समस्या देखें

यदि आप नवीनतम स्थापित करते हैं और अभी भी समस्या है तो कृपया इसे पुनः खोलने के लिए वोट करें।

यहां SSMS v16.5

16.5 में तय स्मृति रिसाव को इंगित करते हुए कनेक्ट मुद्दा

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