九大核心參數速查
| 參數 | 預設 | 建議調整 | 觀測指標 |
back_log | 50 | 500 | Processlist 大量 unauthenticated user |
interactive_timeout | 28800 | 7200 | 睡眠連線佔用槽位 |
key_buffer_size | 8M | 400M (2GB RAM 範例,MyISAM 為主) | Key_reads / Key_read_requests < 0.01 |
max_connections | 100 | 1024 | Max_used_connections / max_connections > 0.85 |
read_buffer_size | 128K | 16M | 全表掃描/範圍查詢多 |
sort_buffer_size | 2M | 16M | Sort_merge_passes 遞增 |
table_open_cache | 64 | 512 | Opened_tables 持續增長 |
thread_cache_size | 0 | 80 | Threads_created / Connections > 0.1 |
wait_timeout | 28800 | 7200 | 殭屍連線數 |
配置修改流程
- 編輯
/etc/my.cnf (或 my.ini) [mysqld] 區段
- 重啟 MySQL:
systemctl restart mysqld / net stop mysql && net start mysql
- 驗證生效:
SHOW GLOBAL VARIABLES LIKE '參數名';
- 壓測 / 觀察生產指標 30 分鐘以上
硬體相關性提醒
- 以上數值基於 2GB RAM、雙核、機械硬碟 範例
- 實際調整必須依據實體記憶體、CPU 核心、儲存介質 (SSD/NVMe/HDD)、負載型態 (OLTP/OLAP/混合) 計算
- 會話級緩衝 (
read_buffer_size, sort_buffer_size) 總量 = 設定值 × 最大連線數,切勿超過實體記憶體 50%
InnoDB 關鍵補充 (現代版本核心)
innodb_buffer_pool_size = 70% 實體記憶體
innodb_log_file_size = 1-4 GB
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = ON
innodb_io_capacity = SSD 2000 / NVMe 5000+
常見誤區
- 只調這 9 參數而忽略 InnoDB 核心參數 → 效能瓶頸未解
- 會話級參數設太大 → 連線暴增瞬間 OOM
- 未監控
Opened_tables、Threads_created、Slow_queries 就宣稱調優完成