現在300〜600人の同時ユーザーがいる(そして成長している)Facebookアプリを実行しています。ハードウェアを成長させる準備をするために、i7 / 12GB RAM / 2x 80GB Intel X25 SSD(Debian 5.0 / MySQL 5.0 / 64bit)をBi-Xeon / 24GB RAM / 2X 120GB Intel Intel ssd(UBUNTU 10.10 / MySQL 5.1 /)に変更しました64ビット)。
今、私はパフォーマンスが「小さい箱」よりも悪いという問題に直面しています。両方のサーバーで、コンテンツを提供するためにnginx / php fcgiを使用しています。
私はinnodbのみを使用しており、読み取り/書き込みは約65%/ 35%です。約800-1000 qpsですが、すべてのクエリは単純で、2つ以上の追加テーブルに参加することはありません。すべてのインデックスが設定され、個別のクエリは低速ログ(> 2秒)に記録されません。現時点では、毎月2倍になると予想している約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
無効になっていて、有効にできますか?