je lance une application facebook qui compte actuellement 300 à 600 utilisateurs simultanés (et en pleine croissance). Pour préparer le matériel pour la croissance, j'ai changé mon i7 / 12 Go de RAM / 2 x 80 Go d'Intel x25 ssd (Debian 5.0 / mysql 5.0 / 64bit) en un bi-xeon / 24 Go de RAM / 2x 120 Go intel 320 ssd (ubuntu 10.10 / mysql 5.1 / 64 bits).
maintenant, je suis confronté au problème que les performances sont pires que sur la "petite boîte". Sur les deux serveurs, j'utilise nginx / php fcgi pour servir le contenu.
J'utilise innodb uniquement, avec des lectures / écritures d'environ 65% / 35%. Environ 800 - 1000 qps mais toutes les requêtes sont simples et ne rejoignent jamais plus d'une table supplémentaire. Tous les index sont définis et aucune requête individuelle n'est enregistrée dans le journal lent (> 2 s). Pour le moment, j'ai environ 400 Mo de données (environ 1 Go avec des index) qui devraient doubler chaque mois.
J'adorerais tous ceux qui pourraient me donner un indice sur ce qu'il faut changer pour que cela fonctionne mieux.
L'ancienne configuration sur la boîte i7 était comme ça (mixte myisam / innodb), fonctionnait assez bien jusqu'à 800+ utilisateurs.
vieux 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
La nouvelle configuration sur la boîte bi-xeon est comme ça (pur innodb), provoquant une charge élevée avec plus de 300 utilisateurs. Environ 30 processus mysql en haut de la liste des processus.
E / S disque:
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
désactivé et peut-il être activé?