This question comes up a lot. Windows Admins and DBAs see one number in Task Manager and the VMware Admins see another number in vSphere. And often the VMware Admins want to reduce the amount of memory that the server has available because of the memory utilization number. Here we see two screenshots from a server at a client’s site. One from task manager and one from vSphere.
You can see that according to vSphere the VM is using about 37 Gigs of it’s memory, when the host has 60 Gigs allocated. Looking at Task Manager we see that all the memory is in use (43 Gigs with Windows saying that 18 Gigs is available). When I look at the PLE for this server, the number is shockingly slow, just 44 seconds (the server is a replication distributor so that actually makes sense). But we can still see a major disparity in the numbers between Task Manager and vSphere.
So who’s right?
That’s the problem, they both are.
Task Manager is right because that’s the amount of RAM in use within the OS. vSphere is also right because it’s showing the amount of memory which has been recently used (I’m not really sure what recently actually means in this instance). The problem is that the vSphere number isn’t measuring things in a way that makes sense for a database server (SQL, Oracle, DB2, MySQL, etc.).
Database platforms store data in memory in order to make that data available for use as needed without hitting the disks again. Just because that data hasn’t been used in an hour (well outside what VMware considers to be “Active”) doesn’t mean that the data should be purged from RAM forcing the database to read the page back from the disk. After all RAM is cheap, and high speed disk isn’t. If the VM admin forces the amount of RAM to be lowered they aren’t allowed to then complain that SQL is pushing the disks harder, because that is exactly what will happen.
The Active Guest memory value is useful for servers running IIS, application servers, etc. For SQL Server it’s useless as databases manage their memory much differently than most other applications. The VM admins are going to need to start trusting that when the DBAs request 64 Gigs of RAM that they actually know what they are talking about.