2017-08-01 11 views
15

32 जीबी रैम के साथ हमारे सर्वर पर हमारे पास SQL ​​सर्वर चलने का एक उदाहरण है जो 80% पर अधिकतम मेमोरी के साथ कैप्ड किया गया है।पूर्ण स्मृति पर कब्जा करने के बाद SQL सर्वर पूरी तरह से धीमा हो जाता है

स्मृति उपयोग कम होने पर सबकुछ ठीक काम करता है। नीचे enter image description here

लेकिन समय बीतने के बाद, 3-4 दिन इसलिए एसक्यूएल पूर्ण रैम (कुल का 80%) का उपयोग करेगा।

इस 3-4 दिनों के दौरान हम सर्वर में कोई बदलाव नहीं करते हैं, लेकिन दिन-प्रतिदिन यह अधिक रैम खाने में रहता है।

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

इस बिंदु पर हमारे पास कोई विकल्प नहीं है लेकिन पूरे सर्वर को पुनरारंभ करें और चीजें सामान्य पर वापस आएं। (पुन: प्रारंभ हो सेवा केवल काम नहीं करता है)

यह एक सप्ताह के लिए काम करेंगे, जिसके बाद हम, कि SQL सर्वर स्मृति जारी नहीं करता है ऑनलाइन इसे फिर से

मैंने पढ़ लिया है पुनः आरंभ करने के लिए है। लेकिन उन्होंने यह भी उल्लेख किया है कि एसक्यूएल कैसे काम करता है, लेकिन प्रदर्शन को प्रभावित नहीं करता है। मेरे मामले में यह करता है और प्रदर्शन पीड़ित है।

क्या कोई स्मृति रिसाव है? या एक संग्रहित प्रो बहुत सारी स्मृति का उपभोग करता है और इसे कभी जारी नहीं करता है? यदि ऐसा है तो मैं इसे कैसे डीबग कर सकता हूं?

+2

मुझे एक ही समस्या थी, लेकिन पाया गया कि समाधान (कुछ हद तक विचित्र रूप से) टोपी को बहुत कम सेट करना था। यह सच है कि एसक्यूएल सर्वर सिर्फ अपने लिए उतनी ही मेमोरी ले लेगा क्योंकि इसे अनुमति है और इसे रिलीज़ नहीं किया गया है। यदि सीमा बहुत अधिक है, तो अंततः सर्वर के अन्य कार्यों को स्मृति से भूखा हो जाता है, और पूरे सिस्टम को स्वैपिंग रखना पड़ता है, जो SQL सर्वर –

+0

सहित सब कुछ धीमा कर देता है आपके डेटाबेस का आकार क्या है? क्या आपने मैन्युअल रूप से किसी भी उच्च मेमोरी खपत के लिए अपने कार्यों, प्रक्रियाओं की जांच की है? – user4221591

+6

@ जोनाथन विल्ककॉक, यही कारण है कि एसक्यूएल सर्वर को एक समर्पित मशीन (वर्चुअल या फिजिकल, कोई फर्क नहीं पड़ता) पर स्थापित किया जाना चाहिए, सर्वर के चलाने के लिए न्यूनतम आवश्यक न्यूनतम सिवाय इसके अलावा कुछ और मौजूद नहीं है। –

उत्तर

19

डिफ़ॉल्ट एसक्यूएल सर्वर तक पूरे स्मृति अगर अनकैप्ड खपत और सभी स्मृति उपलब्ध उपयोग करता है जब capped.This Normal.You यह भी सुनिश्चित करना SQLServer बॉक्स पर केवल आवेदन (जो सिफारिश की है) और also try to cap memory as per best practices है होगा।

मैं शीर्ष स्मृति लेने वाली प्रश्नों खोजने दृष्टिकोण नीचे का उपयोग कर

1.Start का निवारण करने के लिए और देखने अगर मैं क्वेरी ..memory उपभोक्ता प्रश्नों की स्मृति उपयोग को कम कर सकते हैं क्वेरी के नीचे पाया जा सकता हैं।

SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, 
((CASE qs.statement_end_offset 
WHEN -1 THEN DATALENGTH(qt.TEXT) 
ELSE qs.statement_end_offset 
END - qs.statement_start_offset)/2)+1), 
qs.execution_count, 
qs.total_logical_reads, qs.last_logical_reads, 
qs.total_logical_writes, qs.last_logical_writes, 
qs.total_worker_time, 
qs.last_worker_time, 
qs.total_elapsed_time/1000000 total_elapsed_time_in_S, 
qs.last_elapsed_time/1000000 last_elapsed_time_in_S, 
qs.last_execution_time, 
qp.query_plan 
FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
ORDER BY qs.total_logical_reads DESC -- logical reads 
-- ORDER BY qs.total_logical_writes DESC -- logical writes 
-- ORDER BY qs.total_worker_time DESC -- CPU time 

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

पूर्व: क्वेरी कई एक अनुपयुक्त सूचकांक की वजह से पढ़ता है या अपने आईओ उपकरण हो सकता है एक मुद्दा है जिसकी वजह से बफर पूल कई बार

2.You भी शीर्ष घटक है कि का उपयोग पा सकते हैं प्लावित हो रही है है कर रहे होंगे स्मृति, जो आप कैसे रैम

SELECT TOP(20) [type], [name], SUM(single_pages_kb) AS [SPA Mem, Kb] 
FROM sys.dm_os_memory_clerks 
GROUP BY [type], [name] 
ORDER BY SUM(single_pages_kb) DESC; 

बफर पूल लगातार अधिक स्मृति का उपयोग करता है, तो खर्च किया जाता है की समझ देता है, मुझे लगता है कि के बारे में चिंता नहीं करता, लेकिन अगर यह cachestore_obcp है।तो आप कैश की दुकान जो बुरा जांच के

एक हिस्सा एक और की ओर जाता है है भरने कई एड-हॉक क्वेरी हो सकने वाली है, तो आप सुराग के आधार पर समस्याओं का निवारण करने के रूप में कोई एक क्लिक के समाधान

होगा साइड नोट: अनुशंसित नहीं:
हमारे देव उदाहरणों में से एक को एक ही समस्या का सामना करना पड़ता था, इसलिए सभी ट्यूनिंग सामग्री करने के बजाय, हम नीचे दिए गए कमांड को चलाने के लिए उपयोग करते थे जो तुरंत मेमोरी को तुरंत रिलीज़ करता था .. लेकिन यह बिल्कुल नहीं है उत्पादन उदाहरण के लिए अनुशंसित, क्योंकि यह फ्लैश कैश में संग्रहीत योजनाओं का उपयोग करता है और आपको थोड़ा सीपीयू दबाव

का सामना करना पड़ सकता है
DBCC FREEPROCCACHE WITH NO_INFOMSGS; 

संदर्भ:

+1

+1 और http://searchsqlserver.techtarget.com/feature/Built-in-tools-troubleshoot-SQL- सर्वर- स्मृति-usage – Sujith

3

आप सबसे महंगा प्रश्नों का पता लगाना और क्वेरी कोड समीक्षा करने की आवश्यकता की जरूरत है, कई बार क्वेरी कोड प्रभावी रूप से अनुकूल नहीं है । प्रदर्शन ट्यूनिंग आपको करने की ज़रूरत है।

+4

"प्रदर्शन ट्यूनिंग जो आपको करने की आवश्यकता है।" - क्या वह नहीं है जो मास्टर योड ने बहुत समय पहले कहा था? :) – heemayl

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