Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> डेटाबेस

SQL सर्वर में मेमोरी-ऑप्टिमाइज़्ड टेबल से मेमोरी प्रेशर अलर्ट को हैंडल करें

मेमोरी प्रबंधन के मामले में Microsoft SQL सर्वर बहुत स्मार्ट है, लेकिन कभी-कभी मेमोरी प्रेशर अलर्ट और डेटाबेस इंजन अधिक मेमोरी की मांग करते हैं, जिससे त्रुटियां होती हैं।

परिचय

यह पोस्ट चर्चा करती है कि SQL Server® 2019 (एंटरप्राइज़ संस्करण) पर मेमोरी-ऑप्टिमाइज़्ड टेबल्स (इन-मेमोरी ऑनलाइन ट्रांजेक्शन प्रोसेसिंग (OLTP)) के कारण होने वाले मेमोरी प्रेशर के कारण आपके द्वारा अनुभव किए जा सकने वाले असाधारण परिदृश्यों में से एक को कैसे हल किया जाए। SQL सर्वर 2014 और बाद के संस्करणों पर भी यही चरण लागू होते हैं।

आपको अपनी स्क्रीन पर निम्न त्रुटि संदेश फ्लैश होते दिखाई दे सकते हैं:

Message: MSSQL on Windows: Stolen Server Memory is too high
Source: XXXXX\MSSQLSERVER Path: Not Present Alert
description: SQL instance "MSSQLSERVER" Stolen Server Memory on
computer "XXXXXXX.XXX.com" is too high.

Message: SQL Server Alert System: 'Severity 17' occurred on \\XXXXXXX
DESCRIPTION:   There is insufficient system memory in resource pool 'internal'
to run this query.

Message: Disallowing page allocations for database 'InMemoryDB' due to
insufficient memory in the resource pool 'default'. See
'https://go.microsoft.com/fwlink/?LinkId=510837' for more information.

Message: XTP failed page allocation due to memory pressure: FAIL_PAGE_ALLOCATION 32

समाधान

इस समस्या के निवारण और समाधान के लिए निम्न चरणों का पालन करें:

एक कदम

SQL बफर पूल में मेमोरी खपत की जांच करने के लिए पहला कदम है।

SQL सर्वर में मेमोरी-ऑप्टिमाइज़्ड टेबल से मेमोरी प्रेशर अलर्ट को हैंडल करें

जैसा कि आप पिछली छवि से देख सकते हैं, विचाराधीन डेटाबेस, InMemoryDB ,बफर पूल का केवल 0.017% उपभोग करता है।

दूसरा चरण

फिर आप निम्न T-SQL कमांड का उपयोग करके OS मेमोरी क्लर्क की जाँच करें:

select * from sys.dm_os_memory_clerks order by pages_kb desc
SQL सर्वर में मेमोरी-ऑप्टिमाइज़्ड टेबल से मेमोरी प्रेशर अलर्ट को हैंडल करें

परिणाम बताते हैं कि शीर्ष उपभोक्ताओं की कुल अधिकतम सर्वर मेमोरी का लगभग 80% हिस्सा था।

स्मृति-अनुकूलित तालिकाओं का आकार भी 2 जीबी से कम है, जिसे आप DB_ID_6 नाम के लिए पिछली छवि में देख सकते हैं। . जैसे, आदर्श रूप से, सर्वर पर कोई स्मृति दबाव नहीं होना चाहिए।

तीसरा चरण

त्रुटि लॉग में उल्लिखित आउट ऑफ़ मेमोरी (OOM) लिंक की समीक्षा करने के बाद,https://go.microsoft.com/fwlink/?LinkId=510837 , आपको डेटाबेस को स्मृति-अनुकूलित तालिकाओं के साथ संसाधन पूल में बाध्य करने की आवश्यकता है। यह बाध्यकारी स्मृति-अनुकूलित तालिकाओं वाले डेटाबेस के लिए सर्वोत्तम अभ्यास है। रिसोर्स गवर्नर में रिसोर्सपूल बनाने और डेटाबेस को बाइंड करने के लिए चरणों का पालन करें।

सर्वोत्तम अभ्यास अनुशंसा करते हैं कि आप SQL सर्वर को इसके संसाधनों को एक या अधिक स्मृति-अनुकूलित तालिकाओं द्वारा उपभोग करने से बचाएं और अन्य स्मृति उपयोगकर्ताओं को स्मृति-अनुकूलित तालिकाओं द्वारा आवश्यक स्मृति का उपभोग करने से रोकें। इसलिए, आपको स्मृति-अनुकूलित तालिकाओं के साथ डेटाबेस के लिए स्मृति खपत को प्रबंधित करने के लिए एक अलग संसाधन पूल बनाना चाहिए।

संसाधन पूल में डेटाबेस जोड़ते समय निम्नलिखित बातों का ध्यान रखें:

  • आप डेटाबेस को केवल एक संसाधन पूल पर बाँध सकते हैं।
  • आप एक ही पूल में कई डेटाबेस को बाइंड कर सकते हैं।
  • SQL सर्वर मेमोरी-अनुकूलित तालिकाओं के बिना डेटाबेस को संसाधन पूल में बाँधने में सक्षम बनाता है, लेकिन इसका कोई प्रभाव नहीं पड़ता है।
  • आप डेटाबेस में मेमोरी-अनुकूलित टेबल बना सकते हैं और इसे एरेससोर्स पूल से जोड़ सकते हैं।

संसाधन पूल से आबद्ध होने के चरण

  1. मेमोरी आवंटन के साथ संसाधन पूल बनाएं:

    USE [master]
    GO
    
    CREATE RESOURCE POOL [Admin_Pool] WITH(min_cpu_percent=0, 
       max_cpu_percent=100, 
       min_memory_percent=15, 
       max_memory_percent=15, 
       cap_cpu_percent=100, 
       AFFINITY SCHEDULER = AUTO,
       min_iops_per_volume=0,
       max_iops_per_volume=0)
    GO
    

    नोट :स्मृति से बाहर की स्थिति से बचने के लिए, के लिए मानmin_memory_percent और max_memory_percent वही होना चाहिए।

    इस मामले में, स्मृति-अनुकूलित तालिकाएँ बहुत छोटी हैं, कुल सर्वर मेमोरी का 15% संसाधन पूल को आवंटित किया गया है। अपने परिवेश में स्मृति के प्रतिशत की गणना करने के लिए संदर्भों में लिंक का उपयोग करना न भूलें।

  2. संसाधन पूल को सत्यापित करें और डेटाबेस को इससे बांधें:

    EXEC sp_xtp_bind_db_resource_pool 'InMemoryDB', 'Admin_Pool'  
    GO
    
  3. sys.databases . में बाइंड सत्यापित करें :

    SELECT d.database_id, d.name, d.resource_pool_id  
    FROM sys.databases d
    GO
    
    SQL सर्वर में मेमोरी-ऑप्टिमाइज़्ड टेबल से मेमोरी प्रेशर अलर्ट को हैंडल करें
  4. बाइंडिंग को सक्रिय करने के लिए डेटाबेस को पुनरारंभ करें:

    ALTER DATABASE DB_Name SET OFFLINE  
    GO  
    ALTER DATABASE DB_Name SET ONLINE  
    GO  
    

नोट :यदि डेटाबेस हमेशा चालू रहता है, तो दोनों नोड्स पर चरण निष्पादित करें, और चरण 4 (डेटाबेस को पुनरारंभ करें) के बजाय, द्वितीयक उदाहरण के लिए डेटाबेस विफलता निष्पादित करें।

निष्कर्ष

इस मामले में, स्मृति दबाव से संबंधित सभी अलर्ट संसाधन पूल में स्मृति-अनुकूलित तालिकाओं के साथ डेटाबेस जोड़ने के बाद बंद हो गए। मैंने इस विशेष समस्या के लिए कुछ हफ़्ते के लिए SQLServer त्रुटि लॉग की निगरानी की, और किसी भी स्मृति दबाव का कोई निशान नहीं था। इन चरणों ने न्यूनतम डाउनटाइम के साथ डेटाबेस इंजन स्तर पर स्मृति दबाव को ठीक करने में मदद की।

कोई भी टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें। आप हमारे साथ बातचीत भी शुरू कर सकते हैं।


  1. माइक्रोसॉफ्ट एसक्यूएल सर्वर क्वेरी स्टोर

    Microsoft® SQL Server® क्वेरी स्टोर, जैसा कि नाम से पता चलता है, एस्टोर की तरह है जो निष्पादित प्रश्नों, क्वेरी रनटाइम निष्पादन आंकड़ों और निष्पादन योजनाओं के डेटाबेस इतिहास को कैप्चर करता है। चूंकि डेटा डिस्क पर संग्रहीत है, आप समस्या निवारण उद्देश्यों के लिए कभी भी क्वेरी स्टोर डेटा पुनर्प्राप्त क

  1. एकीकृत डेटा प्लेटफ़ॉर्म:SQL सर्वर 2019

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

  1. MS Access से डेटा को SQL सर्वर डेटाबेस में माइग्रेट करें

    हाल ही में, मुझे एक्सेस डेटाबेस से SQL सर्वर 2014 में डेटा माइग्रेट करना पड़ा क्योंकि मेरा डेटाबेस एक्सेस के लिए बहुत बड़ा हो रहा था। हालांकि प्रक्रिया काफी सरल है, मुझे लगा कि मैं चरण-दर-चरण निर्देशों के साथ एक लेख लिखूंगा। सबसे पहले, आपको यह सुनिश्चित करने की आवश्यकता है कि आपके कंप्यूटर पर SQL स