Re: [Exim] 1000 bcc email slow - why?

Góra strony
Delete this message
Reply to this message
Autor: Philip Hazel
Data:  
Dla: Marc Perkel
CC: exim-users
Temat: Re: [Exim] 1000 bcc email slow - why?
On Wed, 3 Oct 2001, Marc Perkel wrote:

> When I send a message to a large number of people the message will sit
> there - apparently doing nothing - for a long time. Generally 30 minutes
> for 250 names. Then - it wakes up and delivers these messages very fast.


This topic was discussed extensively on this list only a week or two
ago.

Exim was not designed with this kind of usage in mind. It does *all* the
routing before *any* of the deliver.[*] So in your case it is going to
do a "large number" of DNS lookups before "waking up".

However, 30 minutes for 250 DNS lookups does seem quite slow. Have you
got a nearby DNS server with lots of cache? Maybe tweaking the timeouts
on the DNS lookups might help. If you've got one address that is taking
several minutes to timeout it will slow down the whole thing.

If you want to use Exim and get parallism in routing, you need somehow
to use multiple copies of the message, with a relatively small number of
recipients on each copy, say less than 100.

If you can't avoid getting single messages with thousands of recipients,
you can probably fudge up some magic configuration that causes Exim to
send multiple copies such messages to itself, with only 100 recipients
in each copy (by sending them over SMTP and using max_rcpt in the
transport and using $recipients_count to test for this case). Then each
copy will be routed in parallel. Mind you, if you have 10,000 recipients
you may not want 100 simultaneous Exim routing processes. See the
previous thread for discussion of ways of handling this.

----------------
[*] Apart from the fact that I wanted Exim to keep Exim simple, one of
the reasons for doing all the routing first is to do with partial
domains. It may be that this kind of usage is now dying out, but it used
to be quite common to use single-component domains for local domains.
For example, somebody else in Cambridge might send me a message by
addressing it to ph10@cus, so the message contains

To: ph10@cus

You want the expansion of that to ph10@??? (which Exim does
automatically) to happen for every copy of the message, in case one of
the recipients is outside the cam.ac.uk domain, where "ph10@cus" has no
meaning. So you have to do the routing first, to find out all these
expansions. (Of course, this doesn't actually apply to bcc addresses,
but Exim doesn't know that.)

Actually, Exim isn't totally strict in this. If routing a domain suffers
a temporary error (DNS timeout, for example), Exim just carries on with
other deliveries. Strictly this is wrong, but it seems the better
approach from a useability point of view.

-- 
Philip Hazel            University of Cambridge Computing Service,
ph10@???      Cambridge, England. Phone: +44 1223 334714.