SQL सर्वर से मेमोरी को पुनः प्राप्त करना


10

मेरे पास एक SQL सर्वर इंस्टेंस है जो मेमोरी उपयोग धीरे-धीरे बढ़ता है जब तक कि विंडोज़ इसे अधिक नहीं देगा। यह तर्कसंगत लगता है कि कभी-कभार बड़ा क्वेरी परिणाम उदाहरण को बढ़ने देगा।

क्या कोई ऐसा तरीका है जिससे मैं SQL सर्वर को उस मेमोरी को रिलीज़ करने के लिए मना सकता हूं, जिसे किसी और की ज़रूरत नहीं है (सेवा को फिर से शुरू करने के अलावा)?

संपादित करें:
मैं SQL Server 2000 SQL Server 8.00.2039 - SP4 (मानक संस्करण) का उपयोग कर रहा हूं

मैं निम्नलिखित क्वेरी का उपयोग करके यह पता लगाने में सक्षम था:

SELECT 'SQL Server ' 
    + CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - ' 
    + CAST(SERVERPROPERTY('productlevel') AS VARCHAR) + ' (' 
    + CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')'

जवाबों:


19

यह ठीक उसी तरह है जैसे SQL सर्वर काम करने वाला है।

यदि आपके पास उस मशीन पर अन्य सेवाएँ हैं और नहीं चाहते हैं कि SQL सभी उपलब्ध मेमोरी का उपभोग करे, तो आपको अधिकतम सर्वर मेमोरी सेट करने की आवश्यकता होगी। MSDN पर SQL सर्वर मेमोरी विकल्प देखें ।


1
एक फीचर की तुलना में बग की तरह अधिक लगता है ... यह मेरे लिए हो रहा है। SQL सर्वर कुछ करने के लिए उपलब्ध RAM का 95% हिस्सा लेता है, और पूरा होने पर इसे जारी करने में विफल रहता है।
अल्केमिकल

1
@Alchemical निर्भर करता है कि आप " पूर्ण " से क्या मतलब है । SQL सर्वर कंप्यूटर में सभी RAM का उपयोग कर सकता है; इसे डिस्क कैश के रूप में उपयोग करना। जब तक आप SQL सर्वर का उपयोग नहीं करते हैं, तब तक इसे डिस्क कैश के रूप में उपयोग करना " पूरा " नहीं करता है ।
इयान बॉयड

8

अन्य पोस्टर सही हैं कि यह डिज़ाइन द्वारा है, लेकिन आप अपने सर्वर की रैम की तुलना में अधिकतम मेमोरी को थोड़ा कम करना चाहते हैं। घटनाओं के इस क्रम के बारे में सोचें:

  • SQL 2000 आपके सर्वर की सभी RAM का उपभोग करते हुए, खुशी से चलता है
  • किसी RDPs में, या आपको पैच डाउनलोड करने के लिए IE को खींचना होगा, या आपके बैकअप को किक करना होगा, जो भी हो
  • SQL को OS को काम करने के लिए पर्याप्त मेमोरी और फ्री मेमोरी देना पड़ता है
  • प्रदर्शन बेकार है, जबकि यह स्मृति को मुक्त करने और डिस्क के लिए पेजिंग है
  • स्थिर होने के बाद चीजें काफी अच्छी हो जाती हैं
  • अन्य ऑपरेशन पूरा हो जाता है और SQL धीरे-धीरे मुक्त रैम को पुनः प्राप्त करता है
  • दोहराना

इससे बचने के लिए, अपनी वास्तविक भौतिक मेमोरी के लगभग 80-90% तक अपनी अधिकतम सर्वर मेमोरी सीमा को कॉन्फ़िगर करें। SQL 2000 के लिए निर्देश: http://msdn.microsoft.com/en-us/library/ms178067.aspx


याद रखें यह व्यवहार 2005 और 2008 है - 2000 ओएस की मांग पर मेमोरी जारी नहीं करता है।
पॉल रान्डल

2
मांग पर बिल्कुल नहीं, लेकिन यह ओएस पर वापस मेमोरी जारी करता है। मैंने जो लिंक पोस्ट किया है, उससे: "जब SQL सर्वर गतिशील रूप से मेमोरी का उपयोग कर रहा है, तो यह समय-समय पर मुफ्त भौतिक मेमोरी की मात्रा निर्धारित करने के लिए सिस्टम से पूछताछ करता है। Microsoft Windows 2000 के तहत, SQL सर्वर 4 एमबी के बीच मुफ्त भौतिक मेमोरी रखने के लिए बफर कैश को बढ़ता या सिकोड़ता है। और सर्वर गतिविधि के आधार पर 10 एमबी। इस मुफ्त मेमोरी को बनाए रखना विंडोज 2000 को पेजिंग से रोकता है। अगर कम मेमोरी मुफ्त है, तो SQL सर्वर विंडोज 2000 के लिए मेमोरी जारी करता है। यदि अधिक मेमोरी फ्री है, तो SQL सर्वर बफर पूल को मेमोरी आवंटित करता है। "
श-बीटा

आह - सच - यह भौतिक स्मृति को थोड़ा कम करने की चाल है - आप सही हैं!
पॉल रान्डल

4

यह केवल इसे जारी करेगा यदि ओएस संकेत देता है कि यह रैम भूखा है, या यदि आप रोकते हैं और सेवा को पुनरारंभ करते हैं; बात यह है कि अधिकतम 'अधिकतम सर्वर मेमोरी' मान को कॉन्फ़िगर करके SQL अधिकतम राशि का उपयोग करेगा। यदि सर्वर पर कुछ और नहीं है जो RAM की आवश्यकता है (और उम्मीद है कि वहाँ नहीं है) तो मैं इसके बारे में चिंता नहीं करूंगा।


4

इसलिए, उत्तरों को संक्षेप में प्रस्तुत करने के लिए:

एमएस SQL ​​सर्वर को तुरंत मेमोरी की आवश्यकता नहीं है इसे तुरंत जारी करने की आवश्यकता नहीं है। SQL सर्वर को आवश्यक होने पर स्वचालित रूप से मेमोरी जारी करनी चाहिए, लेकिन तब से पहले नहीं। और यदि आपकी मेमोरी समस्याएँ हैं, तो आपको "अधिकतम सर्वर मेमोरी" मेमोरी ऑप्टिन के मान को कम करना चाहिए।


3

SQL सर्वर मेमोरी का उपभोग करेगा और इसे वापस नहीं देगा जब तक कि ऑपरेटिंग सिस्टम द्वारा यह नहीं बताया जाता है कि मेमोरी प्रेशर है। जैसा कि पोर्टमैन ने संकेत दिया है, यह डिज़ाइन द्वारा है, और यदि आप मेमोरी की खपत को सीमित करना चाहते हैं, तो आपको अधिकतम सर्वर मेमोरी सेट करना होगा जो SQL सर्वर उपयोग करेगा।


2

याद रखें कि आप जिस व्यवहार का वर्णन कर रहे हैं, वह सब SQL Server 2005 से है, जब मेमोरी मैनेजर OS से मेमोरी प्रेशर रिक्वेस्ट पर (अन्य बातों के अलावा) फिर से लिखा गया था।

SQL सर्वर 2000 और इससे पहले, एक बार यह स्मृति पकड़ लेता है, तो यह इसे वापस नहीं देगा, चाहे कितना भी ओएस इसके लिए चिल्लाए।

कोडस्लेव - क्या आप 2000, 2005 या 2008 को चल रहे हैं?


आह हा ... हाँ वास्तव में SQL 2000.
BIBD

3
जब ओएस इसके लिए चिल्लाता है तो यह इसे वापस नहीं देता है, लेकिन यह वापस दे देता है अगर यह देखता है कि ओएस मुफ्त भौतिक मेमोरी के लिए एक निश्चित सीमा से नीचे है। देखें msdn.microsoft.com/en-us/library/ms178067.aspx
श बीटा

और यह सुनिश्चित करने के लिए कि श-बीटा ने क्या कहा है, SQL Server 2000 केवल मेमोरी जारी करता है जब यह नोटिस करता है कि ओएस भौतिक मेमोरी पर कम है क्योंकि यह विंडोज़ एक्सपी (2001) तक नहीं था कि विंडोज़ ने " ओएस को चिल्लाने के लिए " अनुमति देने के लिए एक एपीआई जोड़ा यह "( msdn.microsoft.com/en-us/library/aa366799(v=vs.85).aspx )। SQL सर्वर 2005 Windows की उस नई सुविधा का लाभ उठाता है। लेकिन जब SQL सर्वर 2000 लिखा गया था तो OS के लिए इसके लिए चिल्लाने का कोई रास्ता नहीं था, SQL सर्वर को समय-समय पर स्मृति दबाव के लिए जाँच करने के लिए मजबूर करना।
इयान बॉयड

0

पुराना प्रश्न, मुझे पता है, लेकिन स्मृति को छोड़ने के लिए मजबूर करने का एक तरीका (नया, कम से कम) एसक्यूएल है कि वह एक एप्लिकेशन लिख सके जो मेमोरी में उतना ही हो जितना कि यह चंक्स में हो, (15) सेकंड (जैसे स्लीप (15000)) और आवंटित मेमोरी को मुक्त करना और बाहर निकलना; मैंने यह कोशिश की और एसक्यूएल मेमोरी को रिलीज़ करता है ताकि सिस्टम को इसकी रैम वापस मिल जाए; उपरोक्त कोड लिखना C / C ++ का उपयोग करके लगभग तुच्छ है, मेमोरी ब्लॉक चेन (पॉइंटर और साइज) को होल्ड करने के लिए केवल एक स्टैक की श्रृंखला स्थापित करने का मामला है, जब तक कि "मॉलॉक ()" विफल नहीं हो जाता है, उत्तरोत्तर आकार को कम कर देता है। एक न्यूनतम (1024 से कम कहते हैं) और फिर आवंटित ब्लॉकों को वापस मुक्त करने के लिए लिंक की गई सूची को पार कर जाता है

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