최대 메모리 가 6GB로 설정된 SQL Server 2014가 있습니다 (실제 메모리는 8GB).
대상 서버 메모리는 때때로 6기가바이트하고 다시 방울 총 서버 메모리 (약 5.3GB, 6기가바이트에 도달하지 않음). 내가 사용 committed_kb을 에 sys.dm_os_sys_info SQL Server에서 사용하는 메모리를 확인 할 수 있습니다.
sys.dm_os_buffer_descriptors를 모니터링 하면 캐시에서 페이지가 삭제되는 것을 볼 수 있지만 여전히 700MB의 메모리가 남아 있습니다. 메모리가 필요없는 경우 페이지가 캐시에서 제거된다는 사실을 어떻게 설명 하시겠습니까? SQL Server는 메모리가 필요할 때만 페이지를 제거 할 것으로 기대합니다.
할당 해제 된 임시 테이블은이 서버에서 문제가되지 않습니다. 내 PLE는 3632입니다. 프로 시저 캐시는 2182MB입니다.
남은 메모리가 없을 때만 페이지가 삭제 될 것으로 예상하지만 700MB의 여유 공간이 있거나 이것을 잘못 이해하고 있습니까?
누군가이 행동을 설명해 줄 수 있습니까?
SQL Server도 디스크에서 읽고 있으므로 필요한 모든 페이지가 메모리에 있다고 결론을 내릴 수 없습니다.
나는 더 많은 연구를했고 디스크에서 메모리로 많은 양의 페이지를 읽었으며 읽는 동안 작업 관리자에서 무언가를 발견했습니다.
- 사용중인 메모리는 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
나는 Windows가 메모리에 저를 실행 한 생각과 SQL 서버 일부를 반환해야하므로. 그러나 약 1GB의 메모리가 사용 가능합니다. => Windows에서 메모리가 부족하다는 이유는 무엇입니까?
<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>
업데이트
왜 항상 1GB의 메모리가 사용 가능한지 조사한 결과, 무언가를 찾은 것 같습니다.
SQL Server가 사용 가능한 메모리 만 할당 할 수 있고 사용 가능한 메모리가 무시 될 수 있습니까? Process Explorer (Sysinternals)를 실행할 때 사용 가능한 메모리가 0임을 확인했습니다.