32GB example:

# The MySQL server

[mysqld]

port=3306

#socket=MySQL

skip-locking

query_cache_type=1

#caches often used queries. 32-512M, depending on how big the commonly cached queries need to be, limit per and overall size

query_cache_limit=12M

query_cache_size=512M

set-variable = connect_timeout=10

#This is for myISAM tables, not needed for appserver

set-variable = key_buffer=384M

set-variable = max_allowed_packet=32M

set-variable = table_cache=1024

set-variable = sort_buffer=2M

set-variable = record_buffer=2M

set-variable = thread_cache=8

# Try number of CPU's*2 for thread_concurrency

set-variable = thread_concurrency=8

set-variable = myisam_sort_buffer_size=64M

server-id = 1

transaction-isolation = READ-COMMITTED

 

# Uncomment the following if you want to log updates

#log-bin

innodb_locks_unsafe_for_binlog=1

 

set-variable = innodb_buffer_pool_size=6144M

#larger sizes help with write intensive workloads and large data sets, but usually not needed above 512M

set-variable = innodb_log_file_size=372M

#set high enough for 1 second worth of operations; maybe 1% of total (8M for 8G, 16 for 16, etc)

set-variable = innodb_log_buffer_size=32M

#default of 1 is slow. 2 uses the OS cache so only lose data on OS crash (power outage, etc). MUCH FASTER.

innodb_flush_log_at_trx_commit=2

innodb_thread_concurrency=16

#Increase based on number of concurrent users; assume each user hits about 100 tables and uses 1 thread (plus app overhead; 6 for overhead plus 1 per user)

table_cache=10240

thread_cache=128

 

set-variable = innodb_mirrored_log_groups=1

set-variable = innodb_log_files_in_group=3

innodb_log_archive=0

# set a smidge high each step; doesn't make a huge difference

set-variable = innodb_additional_mem_pool_size=20M

set-variable = innodb_file_io_threads=4

set-variable = innodb_lock_wait_timeout=30