Back in 2010 Microsoft published their Large Mailbox Vision whitepaper for Exchange Server 2010 to explain how customers could leverage improvements in the platform, as well as the declining cost of storage, to provide large mailboxes for their end users. Before 2010 it was common to see mailbox quotas that would be considered tiny by today’s standards, especially in comparison to the 50GB mailbox quota in Office 365.
Small mailbox quotas are a pain to administer, because you’ll be dealing with end user support cases when quota thresholds are reached, regular requests for quota increases, use of PST files to preserve mailbox data, and the recovery and compliance headaches that come with users deleting important information to stay within their quotas.
Despite the trend towards very large mailboxes Exchange Server still creates new mailbox databases with a relatively small default quota of around 2GB. You can see your mailbox quota settings by running Get-MailboxDatabase.
[PS] C:\>Get-MailboxDatabase | select name,issue*,prohibit* Name IssueWarningQuota ProhibitSendReceiveQuota ProhibitSendQuota ---- ----------------- ------------------------ ----------------- DB05 1.899 GB (2,039,480,320 by... 2.3 GB (2,469,396,480 bytes) 2 GB (2,147,483,648 bytes) DB06 1.899 GB (2,039,480,320 by... 2.3 GB (2,469,396,480 bytes) 2 GB (2,147,483,648 bytes) DB07 1.899 GB (2,039,480,320 by... 2.3 GB (2,469,396,480 bytes) 2 GB (2,147,483,648 bytes) DB08 1.899 GB (2,039,480,320 by... 2.3 GB (2,469,396,480 bytes) 2 GB (2,147,483,648 bytes)
Although 2GB is fine for new users in an organization, who may take a year or more to fill up that much space, if your email storage strategy doesn’t have any kind of archiving or retention in place to help users manage their mailbox sizes you’ll probably find that 2GB will be too small for some of today’s workers.
Choosing Mailbox Quota Thresholds
Appropriate mailbox quotas can be difficult to calculate if you have no historical data from which you can determine the trend for mailbox growth in your organization. A simple approach is run a mailbox size report, then wait one month and run another report. You can then put the data side by side and use some Excel calculations to get an idea of the average mailbox growth rate.
The mailbox size reports will also give you data about average mailbox sizes, and also help you to identify which mailboxes are much larger than average and may need special consideration. As an example from a real world customer, the following mailbox size statistics were calculated:
- The average mailbox size was 1.3GB
- 20% of mailboxes were over 2GB in size
- 10% of mailboxes were over 5GB in size
- 5% of mailboxes were over 10GB in size
- <1% of mailboxes were over 20GB in size
From that analysis it could be determined that a quota of 5GB would satisfy 90% of the user population.
The question was then how to deal with the other 10% that were over 5GB? It was decided that mailbox users who were approved for a mailbox quota of greater than 5GB would be moved to specific databases that were configured with higher quota. Mailboxes greater than 20GB would then have mailbox-specific quotas applied on a case by case basis.
Configuring Mailbox Quotas on Exchange Server Databases
Mailbox storage quotas at the database-level will be inherited by all of the mailboxes hosted on that database, except for the mailboxes that are specifically marked as exempt from the database-level quotas. In my example scenario I want to set two of the databases to use the chosen quota of 5GB. I also need to choose a warning threshold, and a prohibit send/receive threshold (the latter is important because an unattended mailbox that continues to receive email will keep growing otherwise).
Using Set-MailboxDatabase I can configure the desired quota levels. DB05 and DB06 will have the standard quota, DB07 will have the larger quota, and DB08 is going to host a journal mailbox so I’m setting it to a very high quota level.
[PS] C:\>"DB05","DB06" | Set-MailboxDatabase -ProhibitSendReceiveQuota 6GB -ProhibitSendQuota 5GB -IssueWarningQuota 4.8GB [PS] C:\>Set-MailboxDatabase DB07 -ProhibitSendReceiveQuota 12GB -ProhibitSendQuota 10GB -IssueWarningQuota 9.6GB [PS] C:\>Set-MailboxDatabase DB08 -ProhibitSendReceiveQuota 120GB -ProhibitSendQuota 100GB -IssueWarningQuota 96GB [PS] C:\>Get-MailboxDatabase | select name,issue*,prohibit* Name IssueWarningQuota ProhibitSendReceiveQuota ProhibitSendQuota ---- ----------------- ------------------------ ----------------- DB05 4.8 GB (5,153,960,960 bytes) 6 GB (6,442,450,944 bytes) 5 GB (5,368,709,120 bytes) DB06 4.8 GB (5,153,960,960 bytes) 6 GB (6,442,450,944 bytes) 5 GB (5,368,709,120 bytes) DB07 9.6 GB (10,307,921,920 bytes) 12 GB (12,884,901,888 bytes) 10 GB (10,737,418,240 bytes) DB08 96 GB (103,079,215,104 bytes) 120 GB (128,849,018,880 by... 100 GB (107,374,182,400 by...
Excluding Databases from Automatic Mailbox Provisioning
When you create or move a mailbox it is optional to select a target database. When you do not choose a target database, Exchange will select one for you using a basic load balancing approach that tries to keep approximately the same number of mailboxes on each available database.
The special databases above (DB07 and DB08) should be exempt from that automatic mailbox provisioning load balancer, because in this case we only want to move approved users to DB07, and we only want to host the journal mailbox on DB08.
[PS] C:\>"DB07","DB08" | Set-MailboxDatabase -IsExcludedFromProvisioning:$true
Setting Mailbox-Specific Mailbox Quotas
In the customer example I mentioned earlier, some mailbox users would be approved for quotas even larger than the 10GB limit that is permitted for some users. Storage quotas can be set at the mailbox level as well, using the Set-Mailbox cmdlet.
[PS] C:\>Set-Mailbox emma.gardner -UseDatabaseQuotaDefaults $false -IssueWarningQuota 15GB -ProhibitSendQuota 16GB -ProhibitSendReceiveQuota 20GB
Personally I prefer to use a script instead of manually working out what the new quota values should be, and typing out that long command. Using my Set-MailboxQuota.ps1 script I can increase or decrease a user’s mailbox quota by a percentage, or reset them back to using the database-level quotas.
[PS] C:Scripts>.Set-MailboxQuota.ps1 -Mailbox Alannah.Shaw -IncreaseByPercentage 10 ---------------------------------------- Mailbox: Alannah Shaw ---------------------------------------- Uses Database Defaults: True Warning Quota: 1.899 GB (2,039,480,320 bytes) Prohibit Send Quota: 2 GB (2,147,483,648 bytes) Prohibit Send/Receive Quota: 2.3 GB (2,469,396,480 bytes) Calculating new quotas Current warning quota: 1991680 KB New warning quota: 2190848 KB Current send quota: 2097152 KB New send quota: 2306867.2 KB Current send/rec quota: 2411520 KB New send/rec quota: 2652672 KB Setting new quotas Quotas increased by 10 percent ----------------------------------------
For more examples of the script’s use go here.
As a final note I just want to mention over-provisioning. Some organizations choose to over-provision their mailbox databases by allowing a greater amount of potential mailbox data than the underlying disk storage will accommodate. As an example, let’s say you have 100 users on a single mailbox database, and they are given a 5GB mailbox quota. Theoretically you have up to 500GB of mailbox data to be stored in that database, plus database overheads. If the underlying storage capacity won’t fit all of that data, then you’re going to run out of disk space and experience an outage.
I don’t generally like to over-provision in this way, but I know many customers do. As long as your capacity management and monitoring will allow you to provision more storage capacity before you run out then over-provisioning can work just fine. But if buying more storage in your organization is a painful process of navigating budget approvals and purchasing procedures, then I recommend you do not take risks by over-provisioning.