Exchange 2013 – Memory (RAM) allocation by the store with an example
First, a reminder of the theory:
- Exchange store is comprised of 3 services:
- msexchangerepl.exe = Replication Service Process
- Microsoft.Exchange.Store.Service.exe = Store Service Process (or Controller)
- Microsoft.Exchange.Store.Worker.exe = Store Worker Process (1 per DB)
•Algorithm will allocate total ESE cache available for all store worker processes based on physical RAM
– ~25% of total memory allocated to ESE cache
•ESE cache allocated to each database (store worker process) based on number of local database copies and MaximumActiveDatabases configuration
– Static amount of ESE cache allocated to passive and active database copies
•Passive database allocates 20% of max ESE cache target used for active database
– Store worker process will only use max cache target when operating as active
•Max cache target computed at service process startup
– Restart service process when adding/removing copies or changing maximum active database configuration
1- Let’s say your server has 64GB RAM
2- Exchange 2013 store will calculate a max cache target
25% x 64GB RAM = 16GB
That means that potentially, Exchange Store can allocate and use 16GB RAM maximum.
That would be if your server is hosting active databases only: as stated above, for passive databases, Exchange will allocate less memory.
See the point 3- below:
3- Say you will host 10 databases on your server.
The Max cache target computed at service process startup (Microsoft.Exchange.Store.Service.exe) will be evenly distributed between each database : 16GB / 10 = 1.6GB.
For databases that are active on this server, Exchange Store will use 1.6GB cache for these databases.
But for the passive ones on this server, it will use only 20% of the 1.6GB that the Store service that is 327.68MB
So for 5 Passive databases and 5 Active databases, the RAM usage for the Store processes will be
( Max allocated cache per DB x nb active DBs ) + 20% x (Max allocated cache per DB x nb of passive DBs)
( 1.6 x 5 ) + 20% x ( 1.6 x 5 ) = 9.6GB
If you activate all 10 databases on this server, then the RAM usage will then just be :
1.6 x 10 = 16GB.