SQL सर्वर मेमोरी
यह SQL सर्वर मेमोरी के बारे में है। जब सर्वर मेमोरी से बाहर चल रहा होता है, तो हम सीपीयू उपयोग के मुद्दों को दूर करने के लिए हार्डवेयर में अतिरिक्त मेमोरी जोड़ने की सलाह देते हैं।
लेकिन समस्या निवारण के एक भाग के रूप में मेमोरी अपग्रेड के लिए आगे बढ़ने से पहले, हम उस SQL मेमोरी की जाँच / गणना कैसे करते हैं जो वर्तमान में भस्म हो जाती है।
उदाहरण के लिए:
सर्वर का नाम: XXXXXXXXXXXXX
स्थापित भौतिक मेमोरी (RAM): 64.0 GB
वर्तमान में आवंटित SQL सर्वर मेमोरी: 58982 MB -> 58.982 GB
इस मामले में, हमारे पास सर्वर पर केवल एक उदाहरण (MSSQLSERVER) है और मानक के अनुसार 80% मेमोरी को उदाहरण के लिए आवंटित किया गया है। और 20% आवेदन और ओएस के लिए आवंटित किया गया है।
जब हम संसाधन मॉनिटर पर जाँच करते हैं, तो यह 80% भरा हुआ दिखाएगा क्योंकि हमने SQL सर्वर मेमोरी को उस पर सेट कर दिया है।
लेकिन इसका मतलब यह नहीं है कि 80% SQL पूरी तरह से उपयोग किया जाता है, क्योंकि SQL बैकएंड पर बफर में कुछ जगह रखेगा। जब मैं सामने आया, तो मुझे उदाहरण के रूप में खपत SQL मेमोरी की गणना करने के लिए नीचे का सूत्र मिला था, लेकिन इन मापदंडों को प्रदर्शन मॉनिटर टूल पर वापस हटा दिया गया है।
क्या जाँचने का कोई तरीका है, वर्तमान में SQL 80% (OR) में से कितने मेट्रिक्स पर उपयोग करता है जो हम मेमोरी अपग्रेड के साथ आगे बढ़ सकते हैं।
SQL मेमोरी को कैलकुलेट करने के लिए फॉर्मूला: (प्रदर्शन मानदंड से नीचे के मापदंडों को हटा दिया गया है)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
जवाब
हम उस SQL मेमोरी की जाँच / गणना कैसे करते हैं जो वर्तमान में उपभोग की जाती है।
यह करने के लिए काफी सरल है। आपके पास DMV sysinos_os_process_memory है जो आपको जानकारी देगा। यह आपको physical memory usedऔर देगाtotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
लेकिन इसका मतलब यह नहीं है कि 80% SQL पूरी तरह से उपयोग किया जाता है, क्योंकि SQL बैकएंड पर बफर में कुछ जगह रखेगा
एक बार जब SQL सर्वर अधिकतम सर्वर मेमोरी मान तक पहुँच जाता है तो यह उस मेमोरी को तब तक पकड़ कर रखेगा जब तक कि कम मेमोरी नोटिफिकेशन इसे मेमोरी रिलीज़ करने के लिए न कहे। तो हाँ, यह सब इसका उपयोग नहीं हो सकता है, लेकिन फिर भी यह इसे धारण करेगा। इसे कैशिंग कहा जाता है क्योंकि यह कठिन पृष्ठ दोषों से बचने में मदद करता है।
क्या जाँचने का कोई तरीका है, वर्तमान में SQL 80% (OR) में से कितने मेट्रिक्स पर उपयोग करता है जो हम मेमोरी अपग्रेड के साथ आगे बढ़ सकते हैं।
जैसा कि मैंने कहा था कि एक बार उपयोग करने के बाद यह सभी मेमोरी दिखाएगा, भले ही इसे क्वेरी प्रोसेसिंग में उस पेज की आवश्यकता न हो। जब नया अनुरोध आता है तो इन पृष्ठों को नए पृष्ठों के लिए स्थान बनाने के लिए स्थानांतरित कर दिया जाएगा।
आप "उपयोग" को कैसे परिभाषित करते हैं? एक पृष्ठ जिसे एक दूसरे कैश में पढ़ा गया था, क्या इसे उपयोग के रूप में गिना जाएगा? एक मिनट पहले? एक घंटा? एक सप्ताह?
मुद्दा यह है कि "उपयोग" जैसी कोई चीज नहीं है। SQL सर्वर पृष्ठों (और अन्य सामग्री) को स्मृति में रखता है। जब मेमोरी प्रेशर (आंतरिक या बाहरी) होता है तो एक पारंपरिक कैश एजिंग मैकेनिज्म (मूल रूप से) का उपयोग सामान को हटाने के लिए किया जाता है जो हाल ही में उपयोग किए गए हैं। मेमोरी (कैश) से निपटने के लिए बहुत अधिक विवरण हैं, लेकिन मूल रूप से इसे किसी भी कैशिंग तंत्र की तरह संभाला जाता है।
इसलिए, "यूज्ड" या इष्टतम कॉन्फ़िगरेशन जैसी अवधारणाएं मौजूद नहीं हैं। आप यह देख सकते हैं कि कहीं SQL सर्वर द्वारा मेमोरी का उपयोग नहीं किया जा रहा है या नहीं। लेकिन जब SQL सर्वर ने मेमोरी आवंटित की, तो यह उस पर लटका रहेगा जब तक कि मेमोरी का दबाव न हो। कौन जानता है, शायद अगले पेज पर किसी को उस पेज की आवश्यकता होगी?
आप अधिकतम सर्वर मेमोरी को कम कर सकते हैं और देख सकते हैं कि कब आपके प्रदर्शन को चोट लगने लगी है।
MemoryManagerInfoसंग्रहीत कार्यविधि का उपयोग करें , जो यहां पाई जा सकती है:
https://github.com/aleksey-vitsko/Database-Administrator-Tools
यह SQL सर्वर वर्तमान में मेमोरी का उपयोग कैसे करता है इसका अच्छा ब्रेकडाउन प्रदान करता है:
नीचे दिए गए इस चित्र पर उदाहरण देखें - यह वही है जो मेरा सर्वर वर्तमान में उपभोग कर रहा है:
मोटे तौर पर, Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(स्टोल सर्वर मेमोरी में प्लान कैश, लॉक्स आदि शामिल हैं)