On Sat, Jan 31, 2015 at 06:11:20PM +0100, Andrew Bourgeois wrote:
> > > My question is: why is that?
> >
> > Because of the difference: one message, instead of all.
>
> So it's done because of performance reasons?
No, for protocol reasons. The external queue manager protocol
by which pickup, cleanup, and postqueue signal new activity
is very simple, just one byte "trigger" messages. As documented
at
http://www.postfix.org/qmgr.8.html
D (QMGR_REQ_SCAN_DEFERRED)
Start a deferred queue scan. If a deferred queue scan is
already in progress, that scan will be restarted as soon as it
finishes.
I (QMGR_REQ_SCAN_INCOMING)
Start an incoming queue scan. If an incoming queue scan is
already in progress, that scan will be restarted as soon as it
finishes.
A (QMGR_REQ_SCAN_ALL)
Ignore deferred queue file time stamps. The request affects the
next deferred queue scan.
F (QMGR_REQ_FLUSH_DEAD)
Purge all information about dead transports and destinations.
W (TRIGGER_REQ_WAKEUP)
Wakeup call, This is used by the master server to instantiate
servers that should not go away forever. The action is to start
an incoming queue scan.
Since postqueue(1) (via flush(8)) can't tell qmgr(8) which message
to retry, flush(8) moves the message to incoming/ instead, and
sends a QMGR_REQ_SCAN_INCOMING trigger.
> Do the flushed deferred e-mails have priority over the messages that reside
> in the incoming queue? or is it round-robin like when you wait for a
> message to hit the minimal_backoff_time?
The queue manager is round-robin when both incoming and deferred
queue scans are in progress. When only one of the two is being
scanned, then the round-robin is not applicable.
But none of this will help you improve performance. The queue
manager is single threaded and either I/O bound (reading directories,
calling stat(2) to determine which files are ready for processing,
moving queue files from deferred/ or incoming/ to active/, opening
and reading them to determine the recipient lists, ...), or it is
blocked on trivial-rewrite to perform transport table lookups and
the like. The latter only dominates when perhaps transport lookups
are via SQL or LDAP to a remote machine.
A RAID controller with a battery-backed cache is the best way to
get fast metadata updates that might speed up the queue manager.
For read performance, faster disks, more spindles, ...
--
Viktor.