मेरे पास SQL Server 2014 है जिसमें अधिकतम मेमोरी 6GB (भौतिक मेमोरी 8GB) है।
लक्ष्य सर्वर मेमोरी कभी कभी 6GB है और फिर वापस करने के लिए चला जाता है कुल सर्वर स्मृति (लगभग 5.3GB, 6GB कभी नहीं पहुंचता है)। मैंने SQL सर्वर द्वारा उपयोग की गई मेमोरी की जांच करने के लिए sysinos_os_sys_info में प्रतिबद्ध_ kb का उपयोग किया।
जब मैं sysinos_os_buffer_descriptors की निगरानी करता हूं , तो देखता हूं कि पृष्ठ कैश से हटा दिए गए हैं - लेकिन अभी भी 700MB मेमोरी शेष है। यदि किसी मेमोरी की आवश्यकता नहीं है, तो आप इस तथ्य को कैसे समझाएंगे कि पेज कैश से हटा दिए गए हैं? मुझे उम्मीद है कि SQL सर्वर केवल पृष्ठों को हटाता है जब उसे मेमोरी की आवश्यकता होती है।
इस सर्वर पर टैक्लोकेटेड टेम्प टेबल नहीं हैं। मेरा PLE 3632 है। प्रक्रिया कैश 2182 MB है।
मैं उम्मीद करूंगा कि पृष्ठ केवल तब छूट जाएंगे जब कोई मेमोरी नहीं बची है, लेकिन मेरे पास 700 एमबी मुफ्त है या क्या मैं इसे गलत समझ रहा हूं?
क्या कोई कृपया इस व्यवहार को समझाने की कोशिश कर सकता है?
SQL सर्वर डिस्क से भी पढ़ रहा है, इसलिए मुझे लगता है कि मैं यह निष्कर्ष निकाल सकता हूं कि आवश्यक सभी पृष्ठ स्मृति में नहीं हैं।
मैंने कुछ और शोध किया और मैंने डिस्क से मेमोरी में पृष्ठों की एक बड़ी मात्रा को पढ़ा और पढ़े जाने के दौरान टास्कमैनगर में कुछ देखा।
- उपयोग में स्मृति 7.0GB -> 7.2GB -> 7.0GB -> 7.2GB -> से चली गई ...
- Sqlservr.exe 5.3GB -> 5.5GB -> 5.3GB -> 5.5GB -> से चला गया ...
यह वैसा ही है जैसे Windows sqlservr.exe को 6GB तक बढ़ने नहीं देता ।
मैंने Shanky द्वारा प्रदान की गई क्वेरी को चलाया:
select
(physical_memory_in_use_kb/1024) Physical_Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(Virtual_address_committed_kb/1024 )Total_Memory_in_MB,--RAM+ Pagefile
process_physical_memory_low,
process_virtual_memory_low
from sys. dm_os_process_memory
इसने निम्न परिणाम दिया:
Physical_Memory_usedby_Sqlserver_MB: 5247
Locked_pages_used_Sqlserver_MB: 0
Total_Memory_in_MB: 5625
process_physical_memory_low: 0
process_virtual_memory_low: 0
मुझे समझ में नहीं आता कि Total_Memory_in_MB 6144 (अधिकतम मेमोरी) के बराबर क्यों नहीं है?
में sys.dm_os_ring_buffers मैंने पाया RESOURCE_MEMPHYSICAL_LOW
है, इसलिए मुझे लगता है कि विंडोज की मेमोरी कम किया गया था और एसक्यूएल सर्वर कुछ लौट जाना चाहिए। लेकिन लगभग 1GB मेमोरी उपलब्ध है => विंडोज यह क्यों कह रहा है कि यह मेमोरी पर कम चल रहा है?
<Record id="13861" type="RING_BUFFER_RESOURCE_MONITOR" time="20635079241">
<ResourceMonitor>
<Notification>RESOURCE_MEMPHYSICAL_LOW</Notification>
<IndicatorsProcess>0</IndicatorsProcess>
<IndicatorsSystem>2</IndicatorsSystem>
<NodeId>0</NodeId>
<Effect type="APPLY_LOWPM" state="EFFECT_OFF" reversed="0">0</Effect>
<Effect type="APPLY_HIGHPM" state="EFFECT_IGNORE" reversed="0">85827186</Effect>
<Effect type="REVERT_HIGHPM" state="EFFECT_OFF" reversed="0">0</Effect>
</ResourceMonitor>
<MemoryNode id="0">
<TargetMemory>6050080</TargetMemory>
<ReservedMemory>67208656</ReservedMemory>
<CommittedMemory>5423548</CommittedMemory>
<SharedMemory>0</SharedMemory>
<AWEMemory>0</AWEMemory>
<PagesMemory>4975656</PagesMemory>
</MemoryNode>
<MemoryRecord>
<MemoryUtilization>100</MemoryUtilization>
<TotalPhysicalMemory>8387608</TotalPhysicalMemory>
<AvailablePhysicalMemory>1048452</AvailablePhysicalMemory>
<TotalPageFile>11142348</TotalPageFile>
<AvailablePageFile>2887916</AvailablePageFile>
<TotalVirtualAddressSpace>137438953344</TotalVirtualAddressSpace>
<AvailableVirtualAddressSpace>137371168056</AvailableVirtualAddressSpace>
<AvailableExtendedVirtualAddressSpace>0</AvailableExtendedVirtualAddressSpace
</MemoryRecord>
</Record>
अपडेट
कुछ अधिक शोध के बाद क्यों हमेशा 1 जीबी मेमोरी उपलब्ध थी, मुझे लगता है कि मुझे कुछ मिला।
क्या यह संभव है कि SQL सर्वर केवल मुफ्त मेमोरी आवंटित कर सकता है और उपलब्ध मेमोरी को अनदेखा किया जाता है? प्रोसेस एक्सप्लोरर (सिसिन्टर्नल्स) चलाते समय मैंने देखा कि फ्री मेमोरी 0 थी।