Maksimum bellek 6GB olarak ayarlanmış SQL Server 2014'üm var (fiziksel bellek 8GB).
Hedef Sunucu Belleği bazen 6GB ve daha sonra geri düşer Toplam Sunucu Belleği (yaklaşık 5.3GB, 6GB ulaşır asla). Kullandığım committed_kb içinde sys.dm_os_sys_info SQL Server tarafından kullanılan bellek kontrol etmek.
Sys.dm_os_buffer_descriptors'ı izlediğimde , sayfaların önbellekten düştüğünü görüyorum - ancak hala 700MB bellek kaldı. Belleğe hiçbir şey gerekmiyorsa, sayfaların önbellekten kaldırıldığını nasıl açıklarsınız? SQL Server'ın yalnızca bellek gerektiğinde sayfaları kaldırmasını beklerim.
Ayrılan geçici tablolar bu sunucuda bir sorun değildir. Benim PLE'im 3632. Prosedür önbelleği 2182 MB.
Sayfaların yalnızca bellek kalmadığında bırakılmasını beklerim, ancak 700MB boş alanım var mı yoksa yanlış anlıyor muyum?
Birisi lütfen bu davranışı açıklamaya çalışabilir mi?
SQL Server da diskten okuyor, bu yüzden gerekli tüm sayfaların bellekte olmadığı sonucuna varabilirim.
Biraz daha araştırma yaptım ve diskten belleğe büyük miktarda sayfa okudum ve okumalar sırasında taskmanager'de bir şey fark ettim:
- Kullanılan bellek 7,0 GB -> 7,2 GB -> 7,0 GB -> 7,2 GB -> ...
- Sqlservr.exe 5,3 GB -> 5,5 GB -> 5,3 GB -> 5,5 GB -> ...
Windows sanki sqlservr.exe dosyasının 6GB'a çıkmasına izin vermez .
Shanky tarafından sağlanan sorguyu çalıştırdım:
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
Bu şu sonucu verdi:
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
Anlamıyorum ne Toplam_Memory_in_MB neden 6144 (maksimum bellek) eşit değil?
Gelen sys.dm_os_ring_buffers buldum RESOURCE_MEMPHYSICAL_LOW
Windows bellek az düşünüyorum ve SQL Server bazı döndürmesi gerekir, böylece. Ama yaklaşık 1GB kullanılabilir bellek var => Windows neden bellekte azaldığını söylüyor?
<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>
Güncelleme
Neden her zaman 1GB bellek bulunduğunu biraz daha araştırdıktan sonra, bir şey bulduğumu düşünüyorum.
SQL Server yalnızca boş bellek ayırabilir ve kullanılabilir bellek yok sayılabilir mi? Process Explorer'ı (Sysinternals) çalıştırırken boş belleğin 0 olduğunu gördüm.