ฉันกำลังใช้งานแอพ facebook ซึ่งปัจจุบันมีผู้ใช้งานพร้อมกัน 300 - 600 คน (และกำลังเติบโต) เพื่อให้ฮาร์ดแวร์พร้อมสำหรับการเติบโตฉันได้เปลี่ยน i7 / 12gb ram / 2x 80gb intel x25 ssd (debian 5.0 / mysql 5.0 / 64 บิต) เป็น bi-xeon / 24gb ram / 2x 120gb intel 320 ssd (Ubuntu 10.10 / mysql 5.1 / 64bit)
ตอนนี้ฉันกำลังเผชิญกับปัญหาที่ประสิทธิภาพแย่กว่า "กล่องขนาดเล็ก" ในเซิร์ฟเวอร์ทั้งสองฉันใช้ nginx / php fcgi เพื่อแสดงเนื้อหา
ฉันใช้ Innodb เท่านั้นโดยมีการอ่าน / เขียนประมาณ 65% / 35% ประมาณ 800 - 1,000 qps แต่การค้นหาทั้งหมดนั้นง่ายและไม่เคยเข้าร่วมมากกว่า 1 ตารางเพิ่มเติม ดัชนีทั้งหมดถูกตั้งค่าและไม่มีการสืบค้นแต่ละรายการในบันทึกช้า (> 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
ปิดใช้งานและสามารถเปิดใช้งานได้หรือไม่