Ich betreibe eine Facebook-App, die derzeit 300 - 600 Benutzer gleichzeitig hat (und wächst). Um die Hardware für das Wachstum vorzubereiten, habe ich meinen i7 / 12 GB RAM / 2x 80 GB Intel x25 SSD (Debian 5.0 / MySQL 5.0 / 64 Bit) in einen Bi-Xeon / 24 GB RAM / 2x 120 GB Intel 320 SSD (Ubuntu 10.10 / MySQL 5.1 /) geändert. 64bit).
Jetzt stehe ich vor dem Problem, dass die Leistung schlechter ist als bei der "kleineren Box". Auf beiden Servern habe ich nginx / php fcgi verwendet, um den Inhalt bereitzustellen.
Ich benutze nur innodb und habe Reads / Writes von ungefähr 65% / 35%. Etwa 800 - 1000 qps, aber alle Abfragen sind einfach und verbinden niemals mehr als eine zusätzliche Tabelle. Alle Indizes sind festgelegt und es wird keine einzelne Abfrage im langsamen Protokoll (> 2s) protokolliert. Im Moment habe ich ungefähr 400 MB Daten (ungefähr 1 GB mit Indizes) und erwarte, dass sie sich jeden Monat verdoppeln.
Ich würde jeden lieben, der mir einen Hinweis geben könnte, was ich ändern soll, damit es reibungsloser läuft.
Die alte Konfiguration auf der i7-Box war wie folgt (gemischtes Myisam / Innodb) und lief bis zu 800+ Benutzern ziemlich gut.
alt 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
Die neue Konfiguration der Bi-Xeon-Box ist wie folgt (pure innodb) und verursacht bei über 300 Benutzern eine hohe Auslastung. Rund 30 MySQL-Prozesse stehen ganz oben auf der Prozessliste.
Festplatten-E / A:
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
deaktiviert und kann es aktiviert werden?