अपनी स्मृति को रिलीज़ करने के लिए मुझे SQL सर्वर कैसे मिलेगा?


19

मुझे पता है कि एसक्यूएल रैम पसंद करता है, लेकिन विंडोज के पूछने पर इसे जारी करता है। मुझे पता है कि यह कैसे एसक्यूएल काम करने वाला है। लेकिन मेरे पास एक विंडोज़ प्रशासक है जो आश्वस्त नहीं है कि एसक्यूएल वास्तव में रैम लौटाएगा, और इस विशेष (आभासी) सर्वर पर, एसक्यूएल को विश्लेषण सेवाएँ समाप्त होने के बाद बहुत अधिक आवश्यकता नहीं है, लेकिन इस सर्वर पर और कुछ नहीं है जो परेशान कर रहा है SQL के लिए ज्यादा पूछें।

इसलिए मैं विंडोज एडम्स को आश्वस्त करने की कोशिश कर रहा हूं कि वर्चुअल वातावरण की समस्याएं "नहीं हैं क्योंकि एसक्यूएल बहुत अधिक रैम का उपयोग कर रहा है", लेकिन मैं एसक्यूएल को सेवा को फिर से शुरू किए बिना इसे जारी करने के लिए राजी नहीं कर सकता।

क्यूब्स को संसाधित करते समय, SQL सेवा खुशी से 8GB रैम लेती है, लेकिन क्योंकि इस पर कोई दबाव नहीं है, इसलिए यह एक सामान्य दिन के दौरान इसे ज्यादा रिलीज नहीं करता है। विंडोज लोग चिल्लाते हैं, और यह SQL रिलीज होने के लिए बहुत अच्छा होगा।

मैं अधिकतम मेमोरी सेटिंग का उपयोग नहीं करना चाहता, क्योंकि मैं चाहता हूं कि एसक्यूएल प्रसंस्करण के दौरान उस रैम का उपयोग करे। मैं बस यह चाहता हूं कि बाद में फिर से नीचे चला जाए।

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

मैं जानना चाहता हूं कि विंडोज को वापस कैसे लेना है ...


2
क्या ... एक sysadmin रैम के बारे में शिकायत कर रहा है? मैं तब शर्मसार हो जाता हूं जब RAM ISN'T का इस्तेमाल किया जा रहा होता है, क्योंकि अगर इसका इस्तेमाल नहीं किया जा रहा है तो यह बेकार हो जाएगा ...
Mark Henderson

यदि मशीन को मेमोरी की आवश्यकता नहीं है - तो समस्या कहां है, मुझे यह नहीं मिलता है? यह है कि ऑपरेटिंग सिस्टम और इसके अनुप्रयोग सामान्य रूप से कैसे काम करते हैं ... कार्य-भार को देखते हुए निष्क्रिय एसक्यूएल सेवा सबसे अधिक स्मृति रखता है जब किसी और चीज की आवश्यकता नहीं होती है तो इसे अगले एसक्यूएल नौकरी के लिए प्रतिक्रिया समय और / या प्रदर्शन में वृद्धि हो सकती है?
ओस्कर डुवॉर्न

Windows व्यवस्थापक को लगता है कि SQL मशीन को बाहर निकाल रहा है क्योंकि प्रक्रिया में बहुत अधिक रैम है। मुझे पता है कि बॉक्स SQL ​​से तनाव में नहीं है, और यह दिखा सकता है कि SQL सेवा को पुनरारंभ करके, यह दिखा रहा है कि SSAS प्रसंस्करण के लिए डेटा प्राप्त करते समय यह केवल RAM का अधिक उपभोग करता है। इसलिए मैं चाहता हूं कि एसक्यूएल शेष दिन का उपयोग करके रैम की मात्रा दिखाने के लिए मेमोरी जारी करे। यह उन्हें अधिक रैम प्रदान करने के लिए नहीं है, बस उन्हें सामान के लिए एसक्यूएल को दोष देने से रोकने के लिए हो रहा है।
रॉब फ़र्ले

2
फरसेकर के साथ सहमत, sysadmin खुश होना चाहिए रैम का उपयोग किया जा रहा है। यदि इसे पुनः प्राप्त नहीं किया जा रहा है, तो सर्वर को इसकी आवश्यकता नहीं है। हो सकता है कि सिस्टम को तनावग्रस्त न दिखाने के लिए पृष्ठ दोष को देखने के लिए sysadmin से पूछें?
निक कवादिस

2
यदि आपका sysadmin यह नहीं समझता है कि पेज फॉल्स क्या दर्शाता है और क्यों मेमोरी का उपभोग करता है, लेकिन कोई वास्तविक पेज फॉल्स नहीं हो रहा है, तो यह समस्या नहीं है, मुझे नहीं पता कि आपकी मदद कैसे करें। तुम मूर्ख को ठीक नहीं कर सकते। जब आप सिस्टम का उपयोग नहीं कर रहे हैं, तो अधिकतम मेमोरी को कॉन्फ़िगर करने के लिए sp_configure का उपयोग करने के लिए एक चीज़ जो आप कर सकते हैं, वह है और ज़रूरत पड़ने पर इसे वापस कॉन्फ़िगर करना। हालांकि यह बहुत मूर्खतापूर्ण लगता है। sp_configureआम तौर पर कुछ ऐसा है जिसे आपको एक बार सेट करना चाहिए और अकेले छोड़ देना चाहिए।
बेकन

जवाबों:


12

मेरा मानना ​​है कि आपका एकमात्र विकल्प SQL सेवा को पुनरारंभ करना है, या एक एप्लिकेशन चलाना है जो SQL को इसे जारी करने के लिए मजबूर करने के लिए बहुत मेमोरी की खपत करता है।

मुझे @ नैक कावडिय़ों का सुझाव पसंद है: मॉनिटर द मैमोरी: पेज फॉल्ट्स / सेक परफॉर्मेंस काउंटर यह दिखाने के लिए कि एसक्यूएल ने ओएस की मेमोरी को दबाव में नहीं डाला है।


2
धन्यवाद मिच ... मुझे नोटपैड के लिए 10GB पाठ फ़ाइल मिल जाए।
रोब फ़ार्ले

योग्य !, वास्तव में यह एक बुरा विचार नहीं है!
मिच गेहूं

शायद एक 2GB फ़ाइल का उपयोग करें ...
मिच गेहूं

5

उन्हें दिखाने का एक तरीका यह है कि ऐसा होगा कि SQL सर्वर को सभी मेमोरी को चबाया जा सके। फिर नेटवर्क पर एक बड़ी फ़ाइल की प्रतिलिपि बनाएँ (बड़ी SQL बैकअप फ़ाइलें इसके लिए बहुत अच्छा काम करती हैं)। यह सिस्टम कैश को भरने का कारण बनेगा, और Windows SQL से उसकी मेमोरी वापस मांगना शुरू कर देगा। SQL तब तक OS पर मेमोरी वापस लौटना शुरू कर देगा जब तक कि वह आपकी न्यूनतम मेमोरी सेटिंग तक नहीं पहुंच जाता।

(क्षमा करें, ट्विटर के माध्यम से संपूर्ण प्रश्न नहीं मिला, 140 से अधिक वर्णों को स्पष्ट रूप से आवश्यक था।)


1
मैं कुछ प्रक्रिया के लिए उम्मीद कर रहा हूं कि मैं एसक्यूएल को मेमोरी के लिए वापस पूछूंगा (बफ़र्स को साफ करने और छोड़ने के बाद), लेकिन इसे करने के लिए बॉक्स को अपंग किए बिना।
रोब फार्ले

मुझे नहीं लगता कि विंडोज मेमोरी मैनेजर को मेमोरी को वापस लेने के लिए मजबूर करने का एक तरीका है, इस मुद्दे को किसी अन्य माध्यम से मजबूर किए बिना। आप शायद ऐसा कुछ लिख सकते हैं जो ऐसा करने के लिए सीधे win32 एपीआई को हिट करता है, लेकिन जहां तक ​​मुझे स्मृति को वापस करने का अनुरोध करने के लिए विंडोज को ट्रिगर करने का एकमात्र तरीका पता है, यह एक और प्रक्रिया के लिए अधिक मेमोरी की आवश्यकता का कारण है। बॉब या पॉल के साथ जांचें, उनके पास अधिक जानकारी हो सकती है।
मन्दिर

3
VMware का गुब्बारा चालक ठीक यही करता है - यह अपनी मेमोरी को छोड़ने के लिए SQL सर्वर (या किसी अन्य एप्लिकेशन) को प्राप्त करने के लिए अधिक से अधिक मेमोरी के लिए विंडोज से पूछता है।
ब्रेंट ओजर

हाँ - मुझे उम्मीद थी कि मुझे ऐसा कुछ नहीं करना पड़ेगा।
रोब फ़ार्ले

@BrentOzar, VMware के बैलून ड्राइवर केवल सिस्टम कैश से मेमोरी को रिकॉल करता है, वास्तविक प्रक्रिया मेमोरी को नहीं; इसे OS को "तुच्छ चीजों के लिए अपनी सभी उपलब्ध स्मृति का उपयोग न करने" के रूप में डिज़ाइन किया गया है, इसे नीचे लाने के लिए नहीं।
मासिमो

2

आप 'क्यूब्स' का उल्लेख करते हैं, इसलिए यह स्पष्ट नहीं है कि आप एएस इंजन या रिलेशनल इंजन के बारे में बात कर रहे हैं। रिलेशनल इंजन मांग पर स्मृति को मुक्त कर सकता है:

DBCC FREESYSTEMCACHE('<cache name>');

जहां 'कैश नाम' sysinos_os_memory_clerks से लिया गया है । DBCC FREESYSTEMCACHE की कल्पना में केवल गवर्नर पूल का उल्लेख है, लेकिन वास्तव में कई और कैश निकाले जा सकते हैं।

लेकिन यदि सभी मेमोरी का उपयोग बफर पूल द्वारा किया जाता है, तो पूरे बफर पूल को बेदखल करने से जबरदस्त प्रदर्शन में गिरावट और भारी ओओ लोड होगा। बेहतर है कि SQL खुद को संभाल ले।


1
हाय रेमस, रिलेशनल बफर कैश एक क्यूब के प्रसंस्करण के बाद बड़ा है। उसके बाद, मैं वास्तव में चाहता हूं कि कैश साफ हो गया, गिरा दिया गया और मेमोरी विंडोज में वापस आ गई। DBCC DROPCLEANBUFFERS और FREESYSTEMCACHE कैश को खाली करते हैं, लेकिन Windows को मेमोरी वापस नहीं करते हैं, इसलिए यह पूरी तरह से मैं जो चाहता हूं वह नहीं है।
रॉब फ़र्ले

2
सिद्धांत रूप में आप नकली मेमोरी प्रेशर (उदाहरण के लिए। आप trampoline QueryMemoryResourceNotification msdn.microsoft.com/en-us/library/aa366799%28VS.85%29.aspx ) प्राप्त कर सकते हैं, लेकिन मैं वास्तव में वास्तव में वहां नहीं जाऊंगा। यदि SQL प्रतिबद्ध मेमोरी को रिलीज़ नहीं करता है क्योंकि OS को इसकी आवश्यकता नहीं है। OS को मेमोरी की आवश्यकता नहीं है क्योंकि SQL होस्ट ( stackoverflow.com/questions/1401834/… ) पर एकमात्र एप्लिकेशन है , है ना? यदि आप SQL के साथ कुछ अन्य अनुप्रयोग चलाते हैं, तो आपके पास यह आ रहा था।
रेमस रुसानु

2

एएस और डीएस इंजन दोनों के साथ आप मेमोरी पर कैप लगा सकते हैं ताकि वे एक सुरक्षित सीमा से नीचे रहें; यह बहुत से RAM और / या SQL के कई उदाहरणों के साथ 64 bith मशीनों पर अनुशंसित है। कम से कम डेटाबेस इंजन के लिए यदि आप मेमोरी कैप को नीचे बदलते हैं तो वर्तमान उपयोग के लिए यह सेवा को फिर से शुरू करने के लिए सुनिश्चित नहीं है कि फ्लाई डब्ल्यू / ओ पर मेमोरी की मात्रा कम हो जाएगी, हालांकि एसएसएएस के बारे में निश्चित नहीं है।


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

1

मैंने जो सबसे आसान पाया है वह है सर्वर मेमोरी प्रॉपर्टीज में जाना, एक छोटी वैल्यू डालना, अप्लाई करना, कुछ मिनट इंतजार करना और कॉन्फिगर बैक अप को एडजस्ट करना।

हमने थ्रॉटलिंग एसक्यूएल सर्वर मेमोरी उपयोग को भी वास्तव में सर्वर के प्रदर्शन में सुधार कर पाया है क्योंकि यह विंडोज़ को कोचिंग के लिए अधिक राम देता है, आदि।

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