How many times do you see such messages? If it is once or twice it can be ignored.
'Stolen memory' as described in this older support article and How to use the DBCC MEMORYSTATUS is:
Stolen memory describes buffers that are in use for sorting or for hashing operations (query workspace memory), or for those buffers that are being used as a generic memory store for allocations to store internal data structures such as locks, transaction context, and connection information. The lazywriter process is not permitted to flush Stolen buffers out of the buffer pool.
The memory is usually taken from Buffer Pool. If you run DBCC MEMORYSTATUS
and the output shows you high Stolen Pages, this means that some process is stealing memory from buffer pool more that what is necessary and you need to find that process.
It's quite likely that there was some operation running which performed a huge sort operation and at same time SQL Server was heavily consuming memory thus leading to this message. Unless you are facing some OOM issue this message would be more considered as a warning.
Windows successfully diagnosed a low virtual memory condition. The following programs consumed the most virtual memory: sqlservr.exe (2792) consumed 28103749632 bytes
This is general message saying their is low virtual memory condition.
Why would sqlservr.exe be using so much virtual memory?
Their can be quite a few reasons for such messages.
- Windows is facing low memory condition
- Page file is not configured properly
- Some application installed is taking too much memory or leaking memory
As per the error message the SQL Server was the one which required huge amount of memory and was paged out to disk but that is not the only component. You need to find out why SQl Server required huge amount of memory. Knowing the limitation of express edition you should be aware to not run memory intensive queries.
In the error message I can see w3wp.exe
which means application is also running on same machine in such case its quite possible windows would face low memory condition. What is total RAM present on the system ?. Since you have multiple appplications running make sure you have enough RAM on system
I thought SQL Server 2012 Express was limited to 1GB of memory - is that just a physical memory limit?
Aaron already pointed out and I am going to emphasize on that, starting from SQL Server 2012 the SQL Server express database engine can consume more than 1G of memory. The BOL information is not updated one it still says memory is limited to 1 G
which is incorrect. As per this support article
Starting with SQL Server 2012, these memory limits are enforced only
for the database cache (buffer pool). The rest of the caches in the
SQL Server memory manager can use much more memory than is specified
by these edition limits. For example, a SQL Server 2012 Express
edition can use only a maximum size of 1.4 GB for its database cache.
Other caches (such as the procedure cache, the metadata cache, and so
on) can consume memory up to the size specified by the "max server
memory" configuration.
EDIT:
From the output of DMV sys.dm_os_process_memory
.
Physical_memmory_in_use_KB=
445300 KB which is 445 MB
This is physical memory used by SQL Server instance. This is memory backed by physical RAM
Virtual_address_space_committed_kb
= 29116348 KB which is 27 G
This is total SQL Server memory utilized (RAM+Pagefile) by SQL Server. So you can see now amount of SQL Server memory curently paged out to disk is 27G -0.4 G.
You need to find out why and what has caused SQl Server to request so much memory. I strongly suggest you to appply SP3 ASAP.
I am not ruling out possibility of McAfee not causing the issue but with statistics posted it seems SQl Server is one which is requesting more RAM
Best Answer
You could try querying various dmvs with the following script.
It queries the following dmvs for information:
This script was handed over to me by Ramesh Meyyappan at a course on "SQL Server Performance Tuning and Optimisation" at Microsoft SA, Wallisellen, Switzerland.