Dovecot's performance ceiling is almost always IOPS on the index files, not throughput on the mail store.
Three layers, three storage tiers:
| Data | Access pattern | Best storage |
|---|---|---|
Indexes (dovecot.index*) |
Random read/write, small | NVMe local SSD |
| Mail bodies (mdbox/Maildir) | Mostly sequential read | Bulk SSD or even spinning disk |
| Full-text search | Append-only writes, random reads | SSD |
Config:
mail_location = mdbox:/var/mail/vhosts/%d/%n:INDEX=/nvme/indexes/%d/%n:CONTROL=/nvme/control/%d/%n
Memory cache (RAM is fastest):
mail_cache_min_mail_count = 5
mail_cache_purge_min_size = 32k
Process limits to monitor:
| Knob | Watch when |
|---|---|
process_limit per service |
Hitting login latency under bursts |
mail_max_userip_connections |
Misbehaving clients holding hundreds of connections |
first_valid_uid / last_valid_uid |
Multi-tenant safety boundary |
Sign in to keep track of what you have read.