Module 9 · Lesson 18 of 25

Index, cache, and storage placement

Part of Dovecot: IMAP/POP3 at Production Scale — Performance Tuning & Indexes.

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.

Pulse · self-hosted sending

Own the infrastructure your pipeline depends on.

One install script on your own server. Pulse sets up the MTA, mailboxes, certificates and dashboard; you add domains and start sending.

# on a fresh Ubuntu server
$ cd pulse && sudo ./install.sh
→ docker compose up · kumomta · stalwart · caddy
→ dashboard ready on https://pulse.yourdomain.com
$

Also from us:Beat — monitoring that tells you the fixConsulting — $65/hr, no retainer