Pilots have a saying: "You can never have too much fuel, unless it's on fire." Of course, there's also the old chestnut that claims you can never be too rich or too thin. When it comes to Microsoft Exchange Server, is it possible to have too much RAM?
Let me backstop that question with a bit of historical explanation. In the days of 8-, 16-, and 32-bit operating systems, we were pretty much stuck with virtual memory as a means of supporting address spaces larger than the CPU's physical address space. A 32-bit address space allows 4GB of addressable RAM. That amount was an awful lot in 1985, when Intel introduced the 32-bit 80386. Now it's not much; even the inexpensive commodity desktops sold at places such as Best Buy and Office Depot sport 4GB of RAM, and modern servers can hold a great deal more.
How much RAM can Exchange Server 2010 effectively make use of? As with many other scalability questions, it depends.
Let's start with Microsoft's recommendations, available in the TechNet article "Understanding Memory Configurations and Exchange Performance." These recommendations can briefly be summarized as follows:
- 1GB per CPU core for Edge Transport and Hub Transport servers
- 2GB per core for Unified Messaging and Client Access servers
- For Mailbox servers, 4GB plus between 3MB and 30MB per mailbox (so somewhere between 7GB and 34GB for a 1,000-mailbox server)
- 2GB per core for servers that combine Hub Transport and Client Access servers
- For servers that combine the Mailbox role with other roles, a minimum of 8GB (4GB plus 3-30MB/mailbox)
These recommendations seem pretty straightforward, save for the wide range given for per-mailbox RAM allocation (which Microsoft explains in more detail in the TechNet article "Understanding the Mailbox Database Cache"; perhaps an exploration of this topic would be a good idea for a future UPDATE column.) The 30MB per mailbox recommendation is for mailboxes that send and receive a combination of 500 messages per day, so let's adopt a more moderate profile and say that our average users send and receive 250 messages per day. In that case, Microsoft's recommendation would be to use 12MB per mailbox for cache, plus 4GB so that for 2,000 mailboxes we'd end up with 28GB of RAM. That already seems like a lot—but would there be any benefit to putting, say, 32GB or 48GB in the server?
At first blush, it seems that the answer is basically "no." Although the Extensible Storage Engine (ESE) cache uses more RAM if it's available, Microsoft's performance data seems to indicate that you get diminishing returns when adding RAM beyond the recommended amount for your level of mailbox activity. Given that RAM is fairly cheap, adding more RAM doesn't harm performance, but it doesn't give you much of a boost either.
On the other hand, given sufficient RAM, you gain the possibility of virtualizing your Exchange environment and thus making more efficient use of the hardware you already have. Consider a 12-core server with 72GB of RAM—this is a fairly burly server by current standards, but not outrageously so. This example server would be way more hardware than you'd need to handle 2,000 mailboxes, so by running two virtual servers on it, you could essentially have two quad-core servers with 32GB of RAM each. This setup assumes, of course, that you need to handle more than 2,000 mailboxes. For smaller environments, the extra RAM would be worthless, and you'd be better off putting that budget into some other aspect of your Exchange environment.
As for CPU cores, that's another topic. The prevailing wisdom in some quarters is that you can never have too many cores, but that's not true for Exchange—as I'll explain in an upcoming UPDATE.