Virtual Allocation vs. Physical Allocations

This is a question that comes up pretty frequently in Exchange 2003 in relation to 9582 events that indicate Virtual memory is running low. The question? What is the difference between a Virtual Allocation and a Physical Allocation of memory?

A Virtual Allocation is when an address space is set aside to perform a task. As the task is performed memory from this virtual address block may or may not be physically occupied by data.

A couple of analogies to this:

#1:

You call a restaurant to reserve space for 20 people, but in the end only 12 actually attend the meal. In this case your virtual allocation is 20 seats and the process (eating the meal) only physically consumes 12 seats.

#2:

You are tired of the kids arguing over who is going to play with the Kinect next. You send them outside to play. The first child gets outside and decides to play baseball. To this end they reserve the bulk of the play area for their baseball game and start calling friends to come join them. The other child comes outside and finds most of the play area is already reserved. All they are left with is a small section. Since they wanted to play a game that involves less space they take the rest of the play area. Now if this was an Exchange Server we would be starting to generate 9582 error events. The play area is fully allocated. However at this moment the physical allocation in each of these sections is basically only the ground on which each of the two children stands. The physical allocation will grow as more children arrive and become more active in their respective portions of the play area.

Now if the parents come out hoping to watch and enjoy a coffee we already have the entire space allocated. Once the games begin there isn’t any place the parents can sit in peace and not (potentially) have the coffee knocked out of their hands. In Exchange terms the parents showing up and looking for a place to sit would be the equivalent of the Exchange Server generating a 12800 event (12800 typically shows there is not enough virtual memory to process a mail message).

So how do you fix this? Sticking strictly with the high level analogies you either need to increase the size of the play area or set new rules that prevent the children from taking so much space. The change to the Play Area in a 32 bit world can only be accomplished with the /3GB switch. The rules can be tweaked by using msExchESEParamCacheSizeMax, MsExchESEParamLogBuffers, MsExchESEParamMaxOpenTables, HeapDecommitFreeBlockThreshold and other steps that are mentioned in various articles and KBs such as:

https://support.microsoft.com/default.aspx?scid=kb;EN-US;325467

https://support.microsoft.com/default.aspx?scid=kb;EN-US;325044

https://support.microsoft.com/default.aspx?scid=kb;EN-US;317411

https://support.microsoft.com/default.aspx?scid=kb;EN-US;815372

The only other way to increase the play area is to switch from 32 bit to 64 bit. The play area for 32 bit Exchange is 2GB (well 3GB with the /3GB switch) regardless of how many sticks of RAM are installed. Note that for purposes of this discussion the Windows Paging File is considered to be Physical memory and plays no part in the 2GB Virtual Space Exchange 2000 and Exchange 2003 have to work with.