日訪 20 萬+ 網站,MySQL 成為瓶頸,默認參數無法支撐高併發,需根據硬體(特別是記憶體)精細調整。
| 參數 | 默認值 | 調優值 | 調優理由與觀測指標 |
|---|---|---|---|
back_log | 50 | 500 | 監聽隊列長度。show processlist 見大量 unauthenticated user 待連進程時調大。 |
interactive_timeout | 28800 | 7200 | 交互連線空閒斷開時間,減少殭屍連線佔用資源。 |
key_buffer_size | 8MB | 400MB | 索引塊緩衝區,佔記憶體 20% 左右;過大導致換頁反而變慢。 |
max_connections | 100 | 1024 | 避免 Too many connections 錯誤;需配合系統文件描述符限制。 |
record_buffer (read_buffer_size) | 128KB | 16MB | 順序掃描緩衝,大量全表掃描查詢時調大。 |
sort_buffer_size | 2MB | 16MB | 加速 ORDER BY/GROUP BY;每線程分配,不可過大。 |
table_cache (table_open_cache) | 64 | 512 | 所有線程打開表數量;影響文件描述符需求(每表 2 個)。 |
thread_cache_size | 0 | 80 | 線程復用池;對比 Connections vs Threads_created 調整。 |
wait_timeout | 28800 | 7200 | 非交互連線空閒斷開,配合 interactive_timeout 釋放資源。 |
/etc/my.cnf 後重啟 MySQL 生效。Threads_connected、Opened_tables、Sort_merge_passes 等)驗證效果。