DBMail 2 hammers PostgreSQL pretty hard because each message is first delivered to the internal delivery user, processed if needed, and then messages and physmessages are created for each real recipient. Finally the message and physmessage for the delivery user is deleted. This means that each message causes at least one DELETE. I believe this is what causes the need for heavy vacuuming in PostgreSQL.
So, a detail that I hope a PostgreSQL person can answer definitively: will wrapping the delivery into a transaction prevent rows that are eventually deleted from even hitting the database? That would probably completely alleviate the need for heavy vacuuming. Aaron