Exchange 2010: Finding which mailbox is causing database bloat.

Hey everyone,

I'll keep this post short because time is precious if you're looking at this post :) I was working on a case troubleshooting excessive database growth. We leveraged this blog to start our troubleshooting: https://blogs.technet.com/b/exchange/archive/2013/04/18/troubleshooting-rapid-growth-in-databases-and-transaction-log-files-in-exchange-server-2007-and-2010.aspx. After a while, we came to realize it was database bloat aka database space leak. Leveraging https://blogs.technet.com/b/dblanch/archive/2009/04/24/tracking-down-exchange-2007-database-bloat.aspx, we did an "eseutil /ms /v" to grab a verbose space dump of the database. How do you interpret the space dump to find out which mailbox is bloated? Debug/escalation engineer Bill Long teaches us how.

First, the output will show us how much space the database occupies on disk:

******************************** SPACE DUMP *****************************************
Name Type Owned(MB) %OfDb %OfTable Avail(MB) Avail%Tbl
=====================================================================================
.\OldDatabase.edb Db 457888.000 100.00% 4.813         

You can search through for the "big" entries - the ones that take up a significant portion of the database. In our case, we see this entry:

  Body-a9d-13D2471 Pri 84896.000 18.54% 100.00% 48.563 0.06%
    [Long Values] LV 83655.844 18.27% 98.54% 10.688 0.01%

This is saying that a mailbox is taking up 84896MB (18.54%) of the database. We can find out whose mailbox by searching for the mailbox identifier "a9d-13D2471" in the output from: Get-MailboxStatistics | Export-Csv c:\temp\mailboxStats.csv. In our case, it maps to a mailbox whose TotalDeletedItemSize is 304MB and TotalItemSize is 576MB for a total size of 880MB. Now how do we reclaim the leaked space?

  1. Move the mailbox to a different database with New-MoveRequest.
  2. Find the GUID of the deleted mailbox: Get-MailboxStatistics -Database OldDatabase | where {$_.disconnectReason -eq "SoftDeleted"} | fl DisplayName,Disconnect*,LegacyDN,MailboxGuid
  3. Purge the mailbox in the old database with: Remove-StoreMailbox -Database OldDatabase -Identity mailboxGuid -mailboxState SoftDeleted -confirm:$false

This post only offers immediate relief for one particular scenario. If you need more information or assistance, please open a case with Microsoft Support.

Hope this helps,

Matt

edit: Bill Long wrote a blog post himself discussing database bloat in Exchange 2010. He also has a great script that helps identify the problem user(s).