For the past few years most migrations (when I say most, I guess I mean 90%) are moving mailboxes to Office 365 and Exchange Online. This entails a bit of back work, some prep and migrations go relatively smoothly. In May of this year I worked with a company to move 4500 users in Europe to Office 365. We had an incredibly short timeline of moving 4500 mailboxes, 12 TB of data, over a 300 Mb pipe in under a month. Yes. We did get it done. Just under the wire. I also can tell you I saw more errors and stalled out mailboxes moves than I have ever seen in any migration or even in any number of migrations combined while trying to perform these moves.
Just recently I started moving some smaller clients over to Exchange 2016 from Exchange 2016 and we experienced strange issues on the Exchange 2016 server. These same issues were relevant to Office 365 in that we experiences latency issues (on the target) as well as bandwidth issues.
So what can be done to speed up moved to Exchange 2016?
(1) Smaller mailboxes – new to the later CU’s of Exchange 2016, if a mailbox is over 10 GB, the job will Queue and you won’t be able to resume it or retry it. If you dig into the actual move itself, you will see a strange error message or notification about ISInteg. Well, isn’t ISInteg dead? Sort of.
(2) Change throttling Policy – The throttle policy is an important part of the new management model of code in Exchange 2013/2016. Adjusting this does come with its risks/rewards. Be aware that if you adjust these values you could possibly affect the performance of Exchange for end users. I would only recommend this if you are unable to move mailboxes at a sufficient speed. All changes should be reverted once the mailboxes are completely moved to Exchange 2016.
New-ThrottlingPolicy FastMigration Set-ThrottlingPolicy FastMigration -RCAMaxConcurrency Unlimited -EWSMaxConcurrency Unlimited -EWSMaxSubscriptions Unlimited -CPAMaxConcurrency Unlimited -EwsCutoffBalance Unlimited -EwsMaxBurst Unlimited -EwsRechargeRate Unlimited Get-Mailbox | Set-Mailbox -ThrottlingPolicy FastMigration
** This was borrowed from BitTitan as they had it nicely laid out in their documentation.
Again, apply this, move mailboxes, and then remove the policy:
Get-Mailbox | Set-Mailbox -ThrottlingPolicy $Null Remove-ThrottlingPolicy FastMigration
(3) Provide target server with additional resources – faster hard drives (eliminating disk latency), adding server cores, and maximizing memory.
Hard Drives: For Physical servers, JBOD is supported, SATA is supported. Key is larger drives with low latency. For virtual servers, don’t over subscribe or place Exchange databases on drives used by disk intensive apps.
CPU Cores: More cores will allow your server to perform better. In my experience moves will use the extra cores. If the server is physical, follow the recommendations of the Exchange calculator and add some buffer for the additional workload of migrations. For Virtual Servers, do no oversubscribe the CPU Cores. Make sure that Exchange can use the CPUs assigned to it fully. Allow buffer for moves, possibly adding cores for migrations and then remove when the migrations are completed.
Memory: Exchange 2016 servers that are low on memory will indeed perform poorly. Adding RAM is cheap. If physical, plan for having to expand memory as the server gets older. For Virtual Servers, make sure to have spare RAM available and DO NOT over-subscribe, just like CPU Cores.
(4) Verify Mailbox Database Index States – One odd error I did receive doing migrations pointed to corrupt Mailbox Database Indexes. Make sure to check the status like so:
Get-MailboxDatabaseCopyStatus
Name Status CopyQueueLength ReplayQueueLength ContentIndexState
—- —— ————— —————– —————–
DB01\EX02 Mounted 0 0 Healthy
DB02\EX02 Mounted 0 0 Healthy
Fix the error by following the steps in this article.
Then kick off the job again and the move should move again once the Content Index becomes Healthy.