MySQL 效能受數十參數影響,本文聚焦 9 個最高杠桿率參數,解析原理、預設值、調優方向與監控指標,附 2GB/4GB/8GB 記憶體參考配置表。
| 參數 | 預設 | 建議 (2GB RAM) | 核心作用 | 監控指標 |
|---|---|---|---|---|
| back_log | 50 | 500 | TCP 連線請求佇列長度,應對連線風暴 | 未授權連線堆積 (unauthenticated user) |
| interactive_timeout | 28800 | 7200 | 互動式連線閒置斷開秒數 | Threads_connected、Sleep 進程數 |
| key_buffer_size | 8MB | 400MB | MyISAM 索引塊快取 (共享) | Key_read_requests / Key_reads 命中率 |
| max_connections | 100 | 1024 | 最大同時連線數 | Max_used_connections / Aborted_connects |
| read_buffer_size | 128KB | 16MB | 全表掃描順序讀緩衝 (每線程) | Handler_read_rnd_next |
| sort_buffer_size | 2MB | 16MB | ORDER BY/GROUP BY 排序緩衝 (每線程) | Sort_merge_passes |
| table_cache | 64 | 512 | 表描述符快取 (每表 2 fd) | Opened_tables / Open_tables |
| thread_cache_size | 0 | 80 | 執行緒快取複用,減少建立銷毀 | Threads_created / Connections |
| wait_timeout | 28800 | 7200 | 非互動連線閒置斷開秒數 | Sleep 進程數、Aborted_clients |
key_buffer + innodb_buffer_pool + (read_buffer + sort_buffer + join_buffer) * max_connections < 物理記憶體 80%| 參數 | 2GB | 4GB | 8GB | 16GB+ |
|---|---|---|---|---|
| innodb_buffer_pool_size | 1.2G | 2.5G | 6G | 12G+ |
| key_buffer_size | 256M | 512M | 1G | 2G |
| max_connections | 500 | 1000 | 2000 | 5000 |
| thread_cache_size | 50 | 100 | 200 | 500 |
| table_cache | 256 | 512 | 1024 | 2048 |
| sort_buffer_size | 8M | 16M | 16M | 16M |
| read_buffer_size | 8M | 16M | 16M | 16M |
vim /etc/my.cnf
# 修改 [mysqld] 區段參數
systemctl restart mysqld
# 驗證
mysql> SHOW VARIABLES LIKE 'param_name';
sort_buffer 導致 OOMthread_cache_size=0 造成高併發下頻繁建立執行緒wait_timeout 過長累積大量 Sleep 連線佔用資源Opened_tables 持續增長導致 table_cache 不足參數調優無銀彈,唯有「監控 → 假設 → 驗證 → 固化」的閉環才能持續收益。