The physical size of an Exchange database normally grows as data is added to it. When data is removed the amount of data is reduced, but the physical database size (the amount of space taken up on the disk) does not shrink. This empty space in the database file is called whitespace.
For example, if you move half of the mailboxes from DB01 to DB02, DB01 will remain the same physical size on the disk, but half of it will be whitespace. Normally this is not a big deal, but it might be important to you if you need to reclaim that unused disk space. Also, some backup software backs up the entire database, including whitespace. That means you might be wasting backup tapes and time backing up empty data.
Exchange has always reported the database whitespace in the Application event log as Event ID 1221 during scheduled online maintenance, as shown below:
However with Exchange 2010 and its 24×7 ESE scanning, this event is no longer logged since online database maintenance runs all the time by default. You can view the amount of whitespace in any given database using the following cmdlet in the Exchange Managment Shell:
Get-MailboxDatabase Database1 -Status | FT Name,AvailableNewMailboxSpace
The output looks like this:
Unfortunately, this cmdlet doesn’t work on previous versions of Exchange, so I leveraged some code by Shay Levy to write a Powershell script that collects the data from the 1221 events on each server in the Org and exports it to a CSV file.
Click here to download the Get-ExchangeWhitespace script.
The script must be run from the Exchange Management Shell (EMS). It creates a collection of all the Exchange servers (except Edge Transport servers) from AD, and connects to each server’s Application log using WMI. It then collects the data from the 1221 events from the previous day’s online maintenance schedule and exports it to a file called ‘Exchange Whitespace.csv’. Despite all these steps, it’s really fast to execute.
If you want to reclaim the whitespace in a database, you need to perform an offline defrag. You will dismount the database and run the Eseutil /D command, as detailed here. Be aware that this can take quite a long time and you need sufficient free space on the volume to run it.