Windows 2003 Standard Edition (32-bit) and the 3GB Switch
Posted by decipherinfosys on June 4, 2008
We have covered the difference between 32 bit vs 64-bit Windows/SQL install before and how the 3GB switch can be used to make 3GB memory (virtual) available to the user mode processes and you can even have a finer grained control over it by using the /userva parameter in the boot.ini file. You can read more on it here and here. 32-bit operating systems can address 4 GB of memory and the OS divides the address space evenly between user mode and kernel mode memory. Each user mode process can be allocated 2GB of private address space. If we use the /3GB switch in the boot.ini file, then the kernel memory space is reduced to 1GB of Virtual Address Space and the user mode processes that are Large Address Aware can use 3GB. By making use of the /userva option, we can reserve more space for the kernel. Applications like Exchange and SQL Server can take advantage of this increased memory
Of course, using PAE and AWE (on Enterprise and Data Center Editions 32-bit systems), one can make a large amount of virtual memory available but that is a discussion for another post.
In this post, we wanted to mention one thing in relation to the 32-bit Windows 2003 Standard Edition. If you are using Windows 2003 Standard Edition, then be careful with the usage of the 3GB parameter. In 32-bit Windows 2003 Standard Edition, even if you use the 3GB switch, we have found that the user mode applications can avail up-to only 2GB. If the flag is used in the boot.ini file, then the kernel is restricted to 1GB of addressable memory without the increase in the memory that can be used by the user mode applications which essentially means that you will lose the 1GB address space.
Here is an excellent whitepaper from IBM on tuning Windows Server 2003 and it covers the 3GB switch as well as the PAE (and PAE and 3GB combination changes):