As an IT managed services company we’re often asked to do various IT projects. We found a solution for moving email mailboxes from Exchange 2007 or 2010 to Exchange 2013 that can often go very slowly, even when the network and server resources are fast and abundant! The Exchange Mailbox Replication Service (MRS) has extensive resource throttling enabled by default in order to prevent mailbox moves from choking out the rest of the users. Because of this you may see mailboxes with a status of RelinquishedWlmStall and if you look at the details of the Get-MoveRequestStatistics report you will see mailboxes have a lot of time sitting idle under the TotalStalledDueToWriteThrottle counter.
Microsoft tech support suggests making changes to the “MSExchangeMailboxReplication.exe.config” file located at “C:\Program Files\Microsoft\Exchange Server\V15\Bin”. The values to look at, along with their default settings are:
MaxActiveMovesPerSourceMDB=”20″
MaxActiveMovesPerTargetMDB=”20″
MaxActiveMovesPerSourceServer=”100″
MaxActiveMovesPerTargetServer=”100″
MaxTotalRequestsPerMRS=”100″ExportBufferSizeKB=”512″
We typically like to set these values so that about 10 mailboxes can be moved simultaneously. The ExportBufferSizeKB we’ve used in the past is “10240”. The Exchange Mailbox Replication Service should be restarted after these changes.
The other suggestion Microsoft has made is to disable content indexing on the target database so that the search index scanner isn’t overwhelmed by all the new messages needing to be indexed. You’ll want to set it back once the migration is complete.
Set-MailboxDatabase “DB1” -IndexEnabled:$False
In our experience however, these first two suggestions do NOT have tremendous impact on the overall speed. The following two options have proven to be the most effective for us.
Use the “-priority emergency” parameter on the mailbox moves. This will give the move the highest priority in the MRS queue. For example:
New-MoveRequest -Identity “user@domain.com” -TargetDatabase “DB1” -Priority emergency
If the priority flag and the MRS config editing doesn’t make the moves fast enough for you, then disable MRS throttling altogether! To do this, change the “MRS” REG_DWORD key from 1 to 0 under this registry path:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MSExchange ResourceHealth
Then restart the Exchange Mailbox Replication service. Now your mailboxes will move without any throttling policy. Once the mailbox migration is complete change the value back to 1 to re-enable MRS resource monitoring.
Try one or a combination of these in your environment and see what works best for you.
Managed Service Provider
Advanced Data is a Managed Service Provider in Asheville NC, providing support for local business computer networks and infrastructure.
Hi- This is great! I see you list a powershell command to move one mailbox. Is there a way I can use the -Priority parameter for a batch migration? -Thanx
You can’t from the ecp – however a powershell script like:
$csvinput = Import-Csv -Path ‘f:\1018-1.csv’
Foreach ($csv in $csvinput)
{
New-MoveRequest –identity ($csv.DisplayName) –TargetDatabase “Mailbox Database 10182017” -BatchName “1018” -acceptlargedataloss -baditemlimit 999 -priority emergency
}
csv is a simple list:
DisplayName
Administrator
Fred Flinstone
Barney Rubble
Hi Brian,
The config file in 2016 seems to be a lot better now. do you still advocate down this with Exchange 2016?
Pete,
You’re right, the config file is better, but we’ve still seen large move batches to 2016 get throttled to the point where we almost always move mailboxes with the emergency flag. If there are a lot of mailboxes then we’ll just disable MRS for a period and then re-enable it when we’re done. By the way we love your website!
Just read this for a job today, never saw you response! Thanks for the kind words
Good article, just a little confused as to where the config file is, and the MRS service. Config file is on the CAS, but service is on MBX?
thanks for this great article, you saved my time … with the regedit change option on MRS key.
now we can use new-mailboxrestorerequest very faster, and whitout the necessary to restart the exchange mailbox replication every 5 minutes.
big thanks !
Hi,
Good article.
I have some questions:
I have existing job running, can i restart the exchange replication service ?
if i will restart the service will the job is running is it possible the i will see to start errors ?
I used this command to start the job:
Get-Mailbox -Database “DB01” | New-MoveRequest -TargetDatabase DB-1 -BatchName DB-1 -BadItemLimit 50
Is it possible to change the job settings using:
Set-MoveRequest -BatchName “DB-1” -Priority emergency
thank you
The registry hive HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MSExchange ResourceHealth
doe snot exist in Exch2013.
Please elaborate on the validity of the proposed..?