Since the inception of Microsoft exchange server (exchange 4.0 till 2010), a single instance of information store process hosts the databases on a mailbox server (active, passive, lagged and recovery). In all these versions of exchange, there is almost negligible isolation between databases running on a mailbox server. Though this functionality is well designed to provide a stable store process, but it is potential SPOF. For example, if a single mailbox in one database has an issue and causes the IS to crash, it will impact all mailbox database hosted on that server.
With Exchange 2013, the store process is rewritten using C# and now known as Managed Store.
When I first heard/read about the changes in Information store behaviour, it intrigued me to dig more.
So, what is Managed store and how does it help in much more stable mailbox server.
In simple words, Microsoft restructured the information store architecture and evolved from single Information store instance running on a mailbox server to individual instance of database.
In order to provide failure isolation on mailbox database level, Microsoft has tweaked the code to introduced two new processes. There is one single store service controller process known as Microsoft.Exchange.Store.Service.exe aka. This works exactly the same way as Information store (Store.exe) used to work in previous version of exchange.
The store service is responsible for controlling the worker process. if a database is dismounted, store process will terminate the worker process attached to the database and if a database is mounted on a server, store process will bring a new worker process for that database.
The other process is known as a worker process, Microsoft.Exchange.Store.Worker.exe. Each database running on a mailbox server will have its individual worker process.
You must be wondering, so how does it help?
The answer lies in the individual worker process. If there is an issue with a database which may impact the health of the Information store service, unlike in previous version, only this worker process will be terminated without impacting the main Information store service or other worker processes.
Lets see it :
If we have 4 databases mounted on a server, it will have 5 worker process and one Store process.
In the above picture, there are 4 Microsoft Exchange store worker process running and one Microsoft Exchange store service. It means there are 4 active databases currently hosted on this server.
The other change incorporated for Information store process is the way memory utilization. In earlier versions of exchange, store process was notorious to take the maximum memory available and release if any other process needs it. But with introduction of new search functionality (FAST) and changes in transport architecture due to incorporation of HUB transport role to Client Access server and Mailbox server, memory utilization by Information store process is also revisited.
In earlier versions of exchange starting from Exchange 5.5 to Exchange 2010, dynamic buffer allocation was used. This behaviour is now changed to static buffer allocation in Exchange 2013.
In Exchange 2013, store process in now capped to use 25% of total available RAM. For example, if the server has 56 GB or RAM, store process will utilize 14 GB of RAM. As both Active and passive database needs RAM to function, this 25% needs to be allocated to both active and passive databases. 80% of the 25% RAM will be utilized by Active databases and rest 20% will be utilized by passive databases.
Let us break it down
For example, assume the mailbox server has 48 GB of RAM and it hosts 4 active databases and 4 passive databases.
Total Server RAM = 48GB
48GB*25%=12GB allocated for ESE cache
There are 4 active copies on the server
There are 4 passive copies on the server (these can potentially become active)
12GB/(4+4) = 1.5GB
Active database cache = 1.5GB
Passive database cache=1.5GB*0.20 = 0.3GB
Max Cache Target for active and passives = 12GB (25% RAM)
Typical (Used) Cache Target = (4*1.5GB + 4* 0.3GB = 7.2GB)
There is another calculation of RAM on mailbox server if we set MaximumActiveDatabases parameter on a mailbox server. I’ll discuss about this in my next blog…till then….Let the mail flow….