Suppose you are small enough not to want multiple servers each doing exactly one role. If you consider Exchange with the above requirement, you probably have the same problem we used to have. Memory consumption!
STORE.EXE takes almost all available memory, no matter how much you allocate to the server.
This might not seem like a big problem… until you disable page file, to make sure you server runs on memory, and not on a hard drive. If you do that, most likely some of your services will go down in 24 hours.
Information store (IS) service will continue working, but hey, it is not the only one needed working on a server, doing all Exchange roles, and maybe something else.
Restarting IS helps, but not for long. So technically you could have got yourself a scheduled task monitoring the situation and doing restarts as required.
Fortunately, there is a better solution to the problem, a permanent one - limit the cache size of that store. Here’s how:
Open ADSI Editor, which you can open by typing ADSI in the start menu (Windows 2008 and up).
Connect to Configuration container.
Expand the tree as in the picture, until you see Information Store node. Right click -> Properties, select
msExchESEParamCacheSizeMaxand change it to needed size, in kilobytes, divided by 8 (Exchange 2007) or 32 (Exchange 2010). Don’t ask me why they have it like this (if you are still curious, here’s more information).
Thanks to dbstraffin for pointing out a difference in memory page size between 2007 and 2010 and, as a result, a different division factor for each of them.
To apply, you need to do
gpupdate /forcethrough command line to implement new settings into the group policy, and restart information store service.
STORE.EXE will continue to grow until the specified limit + some extra. In my case it was like 10% more then the plan (2GB), but still better than before.