अगर किसी दिए गए SQL सर्वर उदाहरण में "Lock Pages in Memory" सही है तो मैं कैसे यकीन कर सकता हूं?


12

"लॉक पेज इन मेमोरी" राइट SQL सर्वर द्वारा उपयोग किए जाने वाले सेवा खाते को दिया जा सकता है। यह SQL सर्वर को स्मृति को डिस्क पर पृष्ठांकित होने से रोकने की अनुमति देता है।

मैंने देखा है कि SQL सर्वर द्वारा उपयोग किए गए सेवा खाते के लिए इस अधिकार को अनुमति देने के लिए हमारे कई SQL सर्वर मशीनों में स्थानीय नीति कॉन्फ़िगर नहीं है। चूंकि हमारे पास बड़ी संख्या में सर्वर हैं, इसलिए "स्थानीय सिस्टम नीति" प्रबंधन कंसोल का उपयोग करके मैन्युअल रूप से प्रत्येक को जांचना सबसे अच्छा होगा।

क्या एक टी-एसक्यूएल क्वेरी, विस्तारित संग्रहीत कार्यविधि, या कुछ अन्य विधि है जो मैं यह निर्धारित करने के लिए उपयोग कर सकता हूं कि प्रश्न में सर्वर सही है या नहीं?

मैं इसका उपयोग नहीं करना चाहूंगा EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';क्योंकि यह वर्तमान SQL सर्वर त्रुटि लॉग की जांच पर निर्भर करता है; और उस त्रुटि लॉग में प्रासंगिक प्रविष्टि नहीं हो सकती है मान लें कि सर्वर को अंतिम बार पुनरारंभ किए जाने के बाद लॉग को रोल किया गया है। मुझे लगता है कि मैं पहले पैरामीटर 0को 1आदि से संशोधित करके पुराने लॉग की जांच कर सकता हूं , हालांकि हम केवल 10 त्रुटि लॉग बनाए रखते हैं, और यह पर्याप्त नहीं हो सकता है। मैं सेटिंग की पुष्टि करने का एक विफल-सुरक्षित तरीका चाहता हूं।

जवाबों:


11

यदि xp_cmdshellकोई विकल्प है, तो यहां एक स्क्रिप्ट बनाने का उपयोग किया जाता है whoami:

DECLARE @LockPagesInMemory VARCHAR(255);
SET @LockPagesInMemory = 'UNKNOWN';
DECLARE @Res TABLE
(
    [output] NVARCHAR(255) NULL
);

IF (SELECT value_in_use
    FROM sys.configurations c
    WHERE c.name = 'xp_cmdshell'
    ) = 1
BEGIN
    INSERT INTO @Res
    EXEC xp_cmdshell 'WHOAMI /PRIV';

    IF EXISTS (SELECT *
        FROM @Res 
        WHERE [output] LIKE 'SeLockMemoryPrivilege%'
        )
        SET @LockPagesInMemory = 'ENABLED';
    ELSE
        SET @LockPagesInMemory = 'DISABLED';
END

SELECT LockPagesInMemoryEnabled = @LockPagesInMemory;

whoami.exeखाते को निष्पादित करने वाले सभी अधिकारों को रिपोर्ट करने की क्षमता है whoami। यह, यह xp_cmdshellनिर्धारित करने के लिए एक विश्वसनीय तरीका प्रदान करता है कि SQL सर्वर का उदाहरण स्मृति में पृष्ठों को लॉक करने के लिए आवश्यक अधिकार है।

यदि xp_cmdshellसक्षम नहीं है, तो यह कोड लौटाता है UNKNOWN। मान लिया xp_cmdshell जाता है , और SQL सर्वर खाते के लिए दाईं ओर सक्षम है, यह वापस आ जाता है ENABLED, अन्यथा यह वापस आ जाता है DISABLED


9

अन्य तरीके भी हैं। शायद आप दो DMV का उपयोग कर सकते हैं। कृपया ध्यान दें कि दोनों केवल SQL सर्वर 2008 और इसके बाद के संस्करण के लिए काम करेंगे।

एक शून्य शून्य मान locked_page_allocations_kbआपको बताएगा कि SQL सर्वर खाते में मेमोरी विशेषाधिकार में लॉक किए गए पृष्ठ हैं।

select osn.node_id, 
osn.memory_node_id, 
osn.node_state_desc, 
omn.locked_page_allocations_kb
from sys.dm_os_memory_nodes omn
inner join sys.dm_os_nodes osn on (omn.memory_node_id = osn.memory_node_id)
where osn.node_state_desc <> 'ONLINE DAC'

...तथा:

select
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 )Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
from sys.dm_os_process_memory

यदि स्तंभ Locked_pages_allocation_KBएक शून्य शून्य मान दिखाता है, तो SQL सर्वर सेवा खाते में मेमोरी विशेषाधिकार में लॉक किए गए पृष्ठ भी होते हैं।

...तथा:

DBCC MEMORYSTATUSआउटपुट का "मेमोरी मैनेजर" अनुभाग "AWE आवंटित" के लिए एक नॉनज़रो मान दिखाएगा या यदि SQL सर्वर सेवा खाते में मेमोरी विशेषाधिकार में लॉक किए गए पृष्ठ हैं।

ध्यान दें:

यदि SQL सर्वर सेवा खाता स्थानीय सिस्टम (NT Authority \ System) खाते के साथ चल रहा है, तो डिफ़ॉल्ट रूप से SQL सर्वर में मेमोरी विशेषाधिकार में लॉक किए गए पृष्ठ होंगे।

अपडेट करें:

मानक संस्करण के लिए SQL सर्वर 2012 से पहले हमें एलपीआईएम का लाभ लेने के लिए ट्रेस फ्लैग टी -845 को सक्षम करने की आवश्यकता है। यहां तक ​​कि अगर आप एलपीआईएम विशेषाधिकार वाले एसक्यूएल सर्वर चला रहे हैं, तो एसक्यूएल सर्वर वास्तव में एलपीआईएम लाभ का उपयोग नहीं करेगा जब तक कि ट्रेस ध्वज सक्षम न हो।

2012 के बाद से हमें एलपीआईएम लाभ लेने के लिए मानक संस्करण में ट्रेस ध्वज को सक्षम करने की आवश्यकता नहीं है।


4

Microsoft उत्पाद के नए संस्करणों में यह आसान बनाता है यदि आप वास्तव में जानना चाहते हैं कि क्या SQL सर्वर एक स्मृति मॉडल के साथ चल रहा है जो LPIM का लाभ उठाता है (सही अनुमति होने के विपरीत)। यह जानकारी आपके SQL सर्वर के संस्करण के आधार पर sysinos_os_sys_info में है । एक ब्लॉग पोस्ट में वृद्धि की घोषणा की गई थी :

SQL सर्वर 2016 SP1 और SQL Server 2012 SP4 के साथ, दो नए कॉलम हैं sql_memory_model और sql_memory_model_desc को sysinos_os_sys_info में जोड़ा जाता है, जो यह पहचानने के लिए उपयोग किया जा सकता है कि क्या लॉक पेज इन मेमोरी (LPIM) अनुमतियाँ SQL सर्वर सेवा खाते में असाइन की गई हैं।

एक महत्वपूर्ण बात के बारे में पता होना चाहिए, नए कॉलम SQL सर्वर आवृत्ति के स्टार्टअप के बाद से उपयोग में sql मेमोरी मॉडल की रिपोर्ट करते हैं जो वांछित जानकारी है। Sql सेवा खाते के लिए LPIM अनुमतियों के लिए OS स्तर पर कोई चेक नहीं किया गया है। यदि SQL सर्वर स्टार्टअप के दौरान, SQL सर्वर सेवा खाता प्रक्रिया टोकन में LPIM विशेषाधिकार मौजूद है, तो SQL सर्वर SQL मेमोरी को आवंटित करने के लिए लॉक किए गए पृष्ठों (नॉन-पेजेबल) का उपयोग करता है। इसके अलावा, यदि आप SQL सर्वर के एंटरप्राइज़ संस्करण को LPL विशेषाधिकारों के साथ sql सेवा खाते और ट्रेस ध्वज 834 पर चालू करते हैं, तो SQL सर्वर sql मेमोरी को आवंटित करने के लिए बड़े पृष्ठों का उपयोग करता है।

यह जांचने के लिए कि क्या किसी विशेष SQL सर्वर आवृत्ति के लिए मेमोरी विशेषाधिकार में लॉक पेज प्रभावी हैं, आप sql_memory_model को sysinos_os_sys_info में क्वेरी कर सकते हैं और 1 से अधिक मानों की तलाश कर सकते हैं।

यदि एलपीआईएम अनुमतियाँ सेवा खाता प्रक्रिया टोकन में गायब हैं, तो पारंपरिक मेमोरी मॉडल का उपयोग किया जाता है और डीएमवी (sql_memory_model = 1) द्वारा सूचित किया जाता है। यदि अब, मेमोरी विशेषाधिकार में लॉक पेज SQL सर्वर को सौंपा गया है, लेकिन SQL सेवा को पुनरारंभ नहीं किया गया है, तो DMV पारंपरिक मेमोरी मॉडल की रिपोर्ट करना जारी रखेगा क्योंकि स्टार्टअप के बाद से यह मेमोरी मॉडल प्रभाव में है। पुनरारंभ करने के बाद, SQL सर्वर मेमोरी मॉडल में बंद पृष्ठों का उपयोग करता है और वही sysinos_os_sys_info में sql_memory_model और sql_memory_model_desc द्वारा रिपोर्ट किया जाता है।

यदि मैं अपने किसी सर्वर पर निम्नलिखित प्रश्न चलाता हूं:

SELECT sql_memory_model, sql_memory_model_desc
FROM sys.dm_os_sys_info;

वर्तमान में उपयोग में CONVENTIONALलाया जाने वाला मेमोरी मॉडल है , जिसका अर्थ है कि सर्वर स्टार्टअप के समय LPIM को अनुमति नहीं दी गई थी। हालाँकि, एलपीआईएम देना संभव होगा, लेकिन एसक्यूएल सर्वर सेवा को पुनः आरंभ नहीं करना, इसलिए यह डीएमवी आपके लिए आपके प्रश्न की सटीक प्रकृति के आधार पर उपयोगी नहीं हो सकता है।

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