我正在运行一个Facebook应用程序,该应用程序目前有300-600个并发用户(并且还在不断增长)。为了使硬件为增长做好准备,我将i7 / 12gb ram / 2x 80g intel x25 ssd(debian 5.0 / mysql 5.0 / 64bit)更改为bi-xeon / 24gb ram / 2x 120gb intel 320 ssd(ubuntu 10.10 / mysql 5.1 / 64位)。
现在我面临的问题是,性能要比“小盒子”差。在两台服务器上,我一直在使用nginx / php fcgi来提供内容。
我只使用innodb,读/写大约65%/ 35%。大约800-1000 qps,但是所有查询都很简单,永远不会加入超过1个额外的表。所有索引均已设置,并且慢速日志(> 2s)中不会记录任何查询。目前,我大约有400mb的数据(带索引的数据约为1gb),期望它每月增加一倍。
我很喜欢每个可以给我一个提示的人,告诉他们应该进行哪些更改以使其运行更加流畅。
i7机顶盒上的旧配置是这样的(混合myisam / innodb),最多可容纳800多个用户。
旧的my.cnf
key_buffer = 3000M
max_allowed_packet = 128M
thread_stack = 192K
thread_cache_size = 8
max_connections = 400
table_cache = 8000
thread_concurrency = 16
query_cache_limit = 8M
query_cache_size = 128M
wait_timeout = 10
interactive_timeout = 10
connect_timeout = 600
low_priority_updates = 1
join_buffer_size = 8M
read_buffer_size = 2M
sort_buffer_size = 3M
myisam_sort_buffer_size = 32M
read_rnd_buffer_size = 4M
innodb_buffer_pool_size = 3G
innodb_log_buffer_size = 8M
bi-xeon盒上的新配置是这样的(纯innodb),导致300多个用户的高负载。大约30个mysql进程位于进程列表的顶部。
磁盘I / O:
avg-cpu: %user %nice %system %iowait %steal %idle
36.28 0.00 1.60 0.17 0.00 61.95
my.cnf
key_buffer = 64M
max_allowed_packet = 1M
thread_stack = 192K
thread_cache_size = 128
max_connections = 500
table_cache = 512
#thread_concurrency = 10
sort_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
tmp_table_size = 32M
max_heap_table_size = 32M
query_cache_limit = 1M
query_cache_size = 128M
query_cache_type = 1
innodb_file_per_table = 1
innodb_data_file_path = ibdata1:1000M:autoextend
innodb_buffer_pool_size = 16384M
innodb_additional_mem_pool_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_support_xa = 0
innodb_lock_wait_timeout = 50
innodb_flush_method=O_DIRECT
innodb_log_files_in_group = 2
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_thread_concurrency = 12
skip-name-resolve
禁用,可以启用吗?