I've been asked if one of our SQL Server instances has sufficient memory. This is a SQL Server 2008 R2 Standard Edition running on a x64 machine with 40 CPUs and 64 GB of RAM.
The total size of all the databases running under this instance is slightly more than 300 GB.
The instance has been configured with 4096 MB for the Minimum Server Memory and 24000 MB for the Maximum Server Memory.
So far, I've managed to gather the below information:
Physical memory in use:
SELECT physical_memory_in_use_kb,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory
physical_memory_in_use_kb process_physical_memory_low process_virtual_memory_low
------------------------- --------------------------- --------------------------
25657180 0 0
Performance Counters:
SELECT counter_name , cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)',
'Target Server Memory (KB)', 'Granted Workspace Memory (KB)',
'Maximum Workspace Memory (KB)',
'Memory Grants Outstanding', 'Memory Grants Pending')
counter_name cntr_value
----------------------------------- --------------------
Granted Workspace Memory (KB) 1024
Maximum Workspace Memory (KB) 17714520
Memory Grants Outstanding 1
Memory Grants Pending 0
Target Server Memory (KB) 24576000
Total Server Memory (KB) 24576000
Buffer Pool:
select count(*) AS Buffered_Page_Count
,count_big(*) * 8192 / (1024 * 1024) as Buffer_Pool_MB
from sys.dm_os_buffer_descriptors
Buffered_Page_Count Buffer_Pool_MB
------------------- --------------------
2499693 19528
Buffer Pool Size Graph:
BPHR:
PLE:
Plan Cache Size:
Page Reads Per Second
Page Writes Per Second
My questions are:
What are the other things that I should be looking at?
If the above is sufficient, do I have to recommend adding more memory (maybe make it 50 GB) because PLE shows a degradation over time (while Total IO Wait Time shows going up)?
Target Server Memory is equal to the maximum memory set. Is it an indication that the instance can utilise more memory if it is configured with?
So, how do I know if my SQL Server needs more memory? or maybe it doesn't