Share via


Exchange Server 2013 Information Store and Extensible Storage Engine – Deeper Look

In Exchange Server 2013 they have re-written the store code into managed C# code. Where there is new process called Microsoft Exchange Store Worker.exe will get created for each database located in the server. This can be seen on going to the task manager – process tab. Each Microsoft.Exchange.Store.Worker.exe is mapped with process ID (PID) on it.

To find the database for which database the Microsoft.Exchange.Store.Worker.exe holds can be verified using the below powershell command

Get-MailboxDatabase -Status | ft Name, WorkerProcessID

*** ***The Microsoft.Exchange.Store.Service.exe will be used to manage the Microsoft.Exchange.Store.Worker.exe process

Memory Calculation of Microsoft Exchange Store Worker Process.

Earlier version of Exchange we have single Store.exe process which eats up the total memory of the Exchange server. In Exchange server 2013 each Microsoft Exchange Store Worker Process will have their own set of memory.

For Example: Server Detail:

Total Memory in the server:96 GB
Total Number of Database:12 DB
Number of Active Database:6 Active DB
Number of Passive Database:6 Passive DB
Max number of Database can turn Active in the server during disaster:9 Active DB + 3 Passive DB

The maximum number of active database can be set using the powershell command

Set-MailboxServer -ID <ServerName> -MaximumActiveDatabases <Value>

*** *Detail Calculation:
**

Amount of Memory used for ESE is 25% RAM = 96*25/100 = 24 GB will be allocated for Max Cache

The Microsoft.Exchange.Store.Service.exe distribute this 24 GB equally to total number of Database (24 GB/12 DB = 2 GB RAM each DB)

RAM For Total Number of Active Database = 6 * 2 = 12 GB
RAM For Total Number of Passive Database it uses 20% of 2 GB RAM = 400 MB =>  6 * 400 = 2.4 GB
RAM For Exchange server at Normal Condition = 6 Active DB + 6 Passive DB = (6 * 2) + (6 * 400) = 14.4 GB
RAM For Exchange Server on Server disaster  = 9 Active DB + 3 Passive DB = (9 * 2) + (3 * 400) = 19.2 GB

Divider = (MaximumActiveDatabases × 0.8) + (number of databases × 0.2)
Max Cache Target Per Worker = (Total ESE cache allocated from server memory/Divider)
For instance, if you set the MaximumActiveDatabases to 9 for the server in question, the calculation is now:
Divider = (9 × 0.8) + (12 × 0.2) = 7.2 + 2.4 = 9.6
Max Cache Target Per Worker = (24 GB/9.6) = 2.5 GB RAM
Total Sever RAM Cache Usage = (9 × 2.5 GB) + (3 × (2.5 GB*0.20)) = 22.5 + 1.5 = 24 GB (Passive copy utlize 20% of ESE cache of Active copy)

Hence in case if the Exchange server 2013 doesn’t able to provide 25% of RAM to ESE cache then Event ID 906 in the application of Warning message will be generated

Moral: The reason for increase from 2 GB RAM to 2.5 GB RAM for Each Worker is reduce the footprint of I/O operation by holding more pages in the memory. And also Exchange 2013 uses six pages in one large I/O in which the each page size of 32 KB