SQL Server 2008 R2 "घोस्ट मेमोरी"?


12

हमारे पास एक समर्पित SQL Server 2008 R2 मशीन है जो कुछ अजीब स्मृति समस्याओं का सामना कर रही है। मशीन में दो क्वाड-कोर प्रोसेसर, 16GB RAM और 64bit Windows Server 2008 R2 एंटरप्राइज़ सहित बहुत सारे संसाधन हैं (यह एक डेल पॉवरडेज 2950 है) ।

अजीब समस्या यह है कि सिस्टम उपयोग में 82% मेमोरी की रिपोर्ट कर रहा है लेकिन sqlservr.exe केवल 155mb उपयोग में रिपोर्ट कर रहा है। SQL सर्वर पर संदेह करने का कारण यह समस्या है क्योंकि यदि मैं sqlservr.exe को पुनरारंभ करता हूं, तो मेमोरी की खपत समय की अवधि के लिए सामान्य हो जाती है।

क्या किसी के पास कोई विचार है कि मैं इस मुद्दे को कैसे ट्रैक कर सकता हूं?

धन्यवाद, जेसन


3
क्या आप मेमोरी यूजर में लॉक पेज का उपयोग कर रहे हैं? यदि ऐसा है, तो लॉक की गई मेमोरी कार्य प्रबंधक द्वारा रिपोर्ट नहीं की जाएगी। अधिक जानकारी के लिए blogs.technet.com/b/askperf/archive/2008/03/25/… देखें ।
मार्क एस रासमुसेन

हमारे पास मेमरी उपयोगकर्ता में लॉक पेज सही "नहीं" पर सेट है। हमारे पास "अधिकतम सर्वर मेमोरी (एमबी में)" है, यह डिफ़ॉल्ट int.MaxValue पर सेटिंग है - क्या आपको लगता है कि कोई समस्या हो सकती है?
टाइपफ्रैगर 13

4
केवल वही समय होगा जब मेरा sql सर्वर 82% से कम का उपयोग कर रहा है!
स्क्लैकिड

जवाबों:


15

यदि खाता जिस सेवा के तहत चल रहा है, उसमें मेमोरी मैनेजर की मेमोरी के विशेषाधिकार में लॉक पेज हैं (संपादित करें: मार्क रासमुसेन की टिप्पणी / लिंक के अनुसार)। यह निर्धारित करने के लिए कि आप कितनी मेमोरी का उपयोग कर रहे हैं:

  • SQLServer: मेमोरी मैनेजर \ Total सर्वर मेमोरी परफॉमन काउंटर
  • DMVs

मुझे याद नहीं आ रहा है कि कोई DMV है या इसका संयोजन आपको कुल मेमोरी आवंटन देगा, लेकिन निम्नलिखित इसके बारे में बताएगा।

SELECT TOP(10) [type] AS [Memory Clerk Type], SUM(single_pages_kb) AS [SPA Mem, Kb] 
FROM sys.dm_os_memory_clerks 
GROUP BY [type]  
ORDER BY SUM(single_pages_kb) DESC OPTION (RECOMPILE);

SELECT DB_NAME(database_id) AS [Database Name],
COUNT(*) * 8/1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

दूसरा सबसे आम तौर पर डेटाबेस द्वारा बफर पूल आवंटन है। यह वह जगह है जहां शेरों के हिस्से का उपयोग किया जाएगा और यह समझना उपयोगी हो सकता है कि आपके कौन से डेटाबेस सबसे बड़े उपभोक्ता हैं।


वाह बहुत - बहुत धन्यवाद! यह (विशेष रूप से दूसरा वाला) मेरे लिए पूरी तरह से स्पष्ट कर दिया!
टाइपफ्रैगर

8

हमारे अपने ब्रेंट ओजर का एक हालिया लेख है जो इस मामले का इलाज करता है, जब टास्क मैनेजर SQLServer और उसकी अतिरिक्त सेवाओं द्वारा खाए गए मेमोरी को सही ढंग से नहीं दिखाता है। आप इसे यहाँ पा सकते हैं: Microsoft SQL सर्वर मेमोरी के लिए एक Sysadmin की मार्गदर्शिका

उद्धरण: “ SQLServer.exe ज्यादा मेमोरी का उपयोग क्यों नहीं कर रहा है?

जब आप किसी सर्वर में डेस्कटॉप को रिमोट करते हैं और टास्क मैनेजर को देखते हैं, तो sqlservr.exe का मेम यूसेज हमेशा निराला लगता है। यह SQL सर्वर की गलती नहीं है। टास्क मैनेजर एक गंदा, गन्दा झूठा है। (मुझे पता है, ऐसा लगता है कि एसक्यूएल आदमी दोष को स्थानांतरित कर रहा है, लेकिन मेरे साथ एक दूसरे के लिए सहन करता है।) 64-बिट बक्से पर, यह संख्या कुछ अधिक सटीक है, लेकिन 32-बिट बक्से पर, यह पूरी तरह से ऑफ-बेस है । SQL सर्वर कितनी मेमोरी का उपयोग कर रहा है इसकी सही तस्वीर प्राप्त करने के लिए, आपको प्रोसेस एक्सप्लोरर जैसे टूल की आवश्यकता होती है, और आपको SQL सर्वर की सभी प्रक्रियाओं की पहचान करने की आवश्यकता होती है। जो सर्वर मैं सही में दिखा रहा हूं, उसमें दो SQL सर्वर इंस्टेंस (sqlservr.exe द्वारा दिखाए गए), प्लस SQL ​​एजेंट, SQL ब्राउज़र और SQL सर्वर बैकअप टूल हैं। SQL सर्वर एनालिसिस सर्विसेज़, इंटीग्रेशन सर्विसेज़ और रिपोर्टिंग सर्विसेज़ को भी एक ही सर्वर पर चलना असामान्य नहीं है - ये सभी मेमोरी की खपत करते हैं।

SQL कितना मेमोरी का उपयोग कर रहा है? मैं आपके लिए यह आसान कर दूंगा। SQL सर्वर सभी मेमोरी का उपयोग कर रहा है। अवधि।"

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


-2

SQL द्वारा उपयोग की जाने वाली मेमोरी की मात्रा, जैसा कि टास्क मैनेजर में दिखाया गया है, ज्यादातर अधिकतम मेमोरी सेटिंग होगी। इस तरह से मिन / अधिकतम सेटिंग काम करती है:

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

जब सर्वर पर गैर-SQL मेमोरी प्रेशर होता है, तो SQL, मेमोरी को मिनिमम-मेमोरी सेटिंग पॉइंट पर छोड़ देगा। इस तरह से मेमोरी सेटिंग्स का उपयोग किया जाता है। आप मार्क की स्क्रिप्ट का उपयोग यह देखने के लिए कर सकते हैं कि SQL इस मेमोरी का उपयोग कैसे कर रहा है।


1
न्यूनतम / अधिकतम बफर पूल आवंटन को नियंत्रित करता है, इससे ज्यादा कुछ नहीं। यह BOL में सर्वर मेमोरी ऑप्शन के विवरण में पहली पंक्ति है । कार्य प्रबंधक में प्रदर्शित सेटिंग्स का कोई संबंध नहीं है। "एक गंदे, गंदे झूठे" के रूप में टास्कमार्ग का विवरण ब्रेंट स्थिति को और साथ ही मैंने जो भी पढ़ा है, उसके बारे में बताता है।
मार्क स्टोरी-स्मिथ

@ MarkStorey-Smith कृपया अपनी टिप्पणी में लिंक में आगे सामग्री को पढ़ें, यह मेरी बात को और स्पष्ट करता है। कार्य प्रबंधक सिस्टम संसाधनों के उपयोग को दर्शाता है। बफर पूल एक सिस्टम संसाधन नहीं है। मैं समझा रहा हूँ कि टास्क मैनेजर में दिखाए गए SQL द्वारा मेमोरी उपयोग का क्या मतलब है। आप बफर पूल का उल्लेख करके स्पष्ट कह रहे हैं, लेकिन यह अभी भी मुझे गलत साबित नहीं करता है।
स्टेनली जॉन्स

यह सुनिश्चित करने के लिए बेहतर नहीं है कि इसे कैसे लगाया जाए ... "SQL द्वारा उपयोग की जाने वाली मेमोरी की मात्रा, जो कि कार्य प्रबंधक में दर्शाई गई है, ज्यादातर मेमोरी-सेटिंग होगी। यह इसी तरह से मिन / मैक्स सेटिंग काम करती है" .. नहीं, यह isn नहीं है। 'टी।
मार्क स्टोरी-स्मिथ

'यह है कि मिनट / अधिकतम सेटिंग्स कैसे काम करती हैं:' अंत में एक बृहदान्त्र है जिसका अर्थ यह है कि स्पष्टीकरण इस प्रकार है, न कि यह पिछले वाक्य को बताता है। :)
स्टेनलीजॉनस

1
मैं मार्क के साथ हूं। स्लावा ओक्स ब्लॉग पढ़ें : वह उस एमएस टीम का हिस्सा था जिसने मेमोरी मैनेजर लिखा था। शीर्षक "बफर पूल" पर जाएं। मैं उद्धृत करता हूं "याद रखें कि SQL सर्वर में दो मेमोरी सेटिंग्स हैं जिन्हें आप sp_conifigure का उपयोग करके नियंत्रित कर सकते हैं। वे अधिकतम और न्यूनतम सर्वर मेमोरी हैं। मुझे यकीन नहीं है कि आप जानते हैं, लेकिन ये दो सेटिंग वास्तव में बफर पूल के आकार को नियंत्रित करती हैं। वे समग्र नियंत्रण नहीं करती हैं। SQL सर्वर द्वारा उपभोग की गई भौतिक मेमोरी की मात्रा "
gbn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.