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

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


About Raji Subramanian

Nothing great to say about me...Just want to share my knowledge for others that will be useful at any moment of time when they stuck in critical issue....
This entry was posted in Exchange Server 2013, Exchange Server 2013 DAG, Performanace, Powershell Command and tagged , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s