[Note - this problem will also be fixed in the next snapshot] This problem was diagnosed by David Schweikert (ee.ethz.ch). The local_destination_concurrency_limit paramater no longer worked as per-user delivery concurrency limit but instead limited delivery to the entire local domain. Because of this, the limit of "2" as specified in the default main.cf file resulted in poor local delivery performance. This behavior was broken with Postfix release 19991231 patchlevel 3, and all snapshots that appeared since 19991231. To find out what Postfix version you have, execute the command "postconf mail_version". To work around the problem, specify local_destination_concurrency_limit=0 in the main.cf file. This also works for snapshot releases. To fix the problem, cd into the top-level release 19991231 patchlevel 12 source code directory and feed this text as standard input to Larry Wall's patch command: patch -p0 queue_name, request->queue_id, request->data_offset, request->data_size, ! addr, request->sender, request->errors_to, request->return_receipt, request->arrival_time, offs, addr, "0"); --- 90,96 ---- mail_print(stream, "%s %s %ld %ld %s %s %s %s %ld %ld %s %s", request->queue_name, request->queue_id, request->data_offset, request->data_size, ! request->nexthop, request->sender, request->errors_to, request->return_receipt, request->arrival_time, offs, addr, "0"); diff -cr ../postfix-19991231-pl12/qmgr/qmgr_deliver.c ./qmgr/qmgr_deliver.c *** ../postfix-19991231-pl12/qmgr/qmgr_deliver.c Fri Mar 19 19:45:02 1999 --- ./qmgr/qmgr_deliver.c Sun Dec 10 09:51:15 2000 *************** *** 44,49 **** --- 44,50 ---- /* System library. */ #include + #include #include /* Utility library. */ *************** *** 116,125 **** --- 117,128 ---- QMGR_RCPT_LIST list = entry->rcpt_list; QMGR_RCPT *recipient; QMGR_MESSAGE *message = entry->message; + char *cp; mail_print(stream, "%s %s %ld %ld %s %s %s %s %ld", message->queue_name, message->queue_id, message->data_offset, message->data_size, + (cp = strrchr(entry->queue->name, '@')) != 0 && cp[1] ? cp + 1 : entry->queue->name, message->sender, message->errors_to, message->return_receipt, message->arrival_time); diff -cr ../postfix-19991231-pl12/qmgr/qmgr_message.c ./qmgr/qmgr_message.c *** ../postfix-19991231-pl12/qmgr/qmgr_message.c Tue Nov 21 19:26:48 2000 --- ./qmgr/qmgr_message.c Sun Dec 10 10:34:32 2000 *************** *** 535,542 **** */ if ((at = strrchr(STR(reply.recipient), '@')) == 0 || resolve_local(at + 1)) { - #if 0 vstring_strcpy(reply.nexthop, STR(reply.recipient)); (void) split_at_right(STR(reply.nexthop), '@'); #endif #if 0 --- 535,543 ---- */ if ((at = strrchr(STR(reply.recipient), '@')) == 0 || resolve_local(at + 1)) { vstring_strcpy(reply.nexthop, STR(reply.recipient)); + lowercase(STR(reply.nexthop)); + #if 0 (void) split_at_right(STR(reply.nexthop), '@'); #endif #if 0