Try PostgreSQL. Not to start a flame-war, but it's been my experience
that Postgres does better in highly concurrent environments like what
you have described.
Greg Hellings wrote:
We've been having terrible load issues with 2.0.9 and only about 300
users. We've got dual 3.6ghz Xeons with 1M L2 cache and 4G of ram and a
RAID5 979G. During our heavy load hours (9-5) the system crawls to the
point of timing out many mail client operations. The load averages are
extremely high, and Mysql and Dbmail-imapd are using a ton of cpu.
Our clients are using a mix of Entourage, Mail.app, Thunderbird, and
squirrelmail (only 5 or 10 webmail clients during our heavy load period).
Our dbmail_messageblk is about 220G right now.
The system runs fine until about 170 users connect, and then the slow
downs start.
Here is our my.cnf and dbmail.conf
#############################################################
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
set-variable=max_connections=350
set-variable=query_cache_size=64M
set-variable=max_allowed_packet=16M
set-variable=table_cache=1024
set-variable=open_files_limit=4096
set-variable=binlog_cache_size=1M
set-variable=max_heap_table_size=32M
set-variable=thread_cache_size=80
set-variable=query_cache_limit=2M
set-variable=tmp_table_size=64M
set-variable=sort_buffer_size=16M
set-variable=log_slow_queries=/var/log/mysql-slow.log
set-variable=long_query_time=10
set-variable=innodb_log_group_home_dir=/var/lib/dbmail-log/
set-variable=key_buffer_size=8M
set-variable=wait_timeout=60
set-variable=interactive_timeout=60
set-variable=thread_concurrency=8
set-variable=innodb_thread_concurrency=10
set-variable=innodb_buffer_pool_size=2G
set-variable=innodb_additional_mem_pool_size=4M
set-variable=innodb_log_buffer_size=4M
set-variable=thread_cache_size=8M
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#############################################################
[DBMAIL]
host=localhost
sqlport=3306
# sqlsocket=/var/lib/mysql/mysql.sock
user=dbmail
pass=
db=dbmail
POSTMASTER=
TRACE_LEVEL=2
[SMTP]
SENDMAIL=/usr/sbin/sendmail
AUTO_NOTIFY=no
AUTO_REPLY=no
TRACE_LEVEL=2
[LMTP]
EFFECTIVE_USER=dbmail
EFFECTIVE_GROUP=dbmail
BINDIP=*
PORT=24
NCHILDREN=20
MAXCHILDREN=10
MINSPARECHILDREN=2
MAXSPARECHILDREN=4
MAXCONNECTS=10000
TIMEOUT=300
RESOLVE_IP=no
TRACE_LEVEL=2
MAX_ERRORS=500
[POP]
EFFECTIVE_USER=dbmail
EFFECTIVE_GROUP=dbmail
BINDIP=*
PORT=120
NCHILDREN=50
MAXCHILDREN=200
MINSPARECHILDREN=2
MAXSPARECHILDREN=4
MAXCONNECTS=10000
TIMEOUT=300
RESOLVE_IP=yes
POP_BEFORE_SMTP=no
TRACE_LEVEL=2
[IMAP]
EFFECTIVE_USER=dbmail
EFFECTIVE_GROUP=dbmail
BINDIP=*
PORT=143
NCHILDREN=50
MAXCHILDREN=200
MINSPARECHILDREN=2
MAXSPARECHILDREN=4
MAXCONNECTS=1000
TIMEOUT=60
RESOLVE_IP=no
IMAP_BEFORE_SMTP=no
TRACE_LEVEL=1
#############################################################