連線與網路參數
| 參數 | 說明 | 建議值 |
| back_log | TCP 監聽隊列長度,短期大量連線衝擊時緩衝 | 預設 80,高併發調大至 500-1000,受 OS somaxconn 限制 |
| connect_timeout | 握手階段等待封包秒數 | 10-30 |
| max_connections | 最大並發連線數 | 按業務評估,配合 open_files_limit |
| max_connect_errors | 主機連線錯誤閾值,超過封鎖,FLUSH HOSTS 解封 | 10000+ |
| net_buffer_length | 通訊緩衝區初始大小,自動擴展至 max_allowed_packet | 16KB-64KB,極少記憶體環境調小 |
| max_allowed_packet | 單封包最大值,含 BLOB/長 SQL | 16M-64M (應用層同步設定) |
超時參數
| 參數 | 說明 | 建議值 |
| wait_timeout | 非互動連線空閒斷開秒數 | 60-300 (應用層連線池回收前) |
| interactive_timeout | 互動客戶端 (mysql CLI) 空閒斷開 | 28800 (8小時) |
| delayed_insert_timeout | INSERT DELAYED 執行緒等待秒數 | 300 |
緩衝區與記憶體參數 (全域)
| 參數 | 用途 | 建議 |
| key_buffer_size | MyISAM 索引塊緩存 | 純 MyISAM 30-40% 記憶體,混合 16-32MB |
| table_cache | 所有線程共享的打開表快取 | 百表 1024,千表 5000+,關聯 open_files_limit |
| thread_cache_size | 線程快取,減少建銷開銷 | 16-64,觀察 Threads_created |
| query_cache_size | 查詢結果快取 (5.7 棄用) | 唯讀密集 32-512M,寫入頻繁關閉 |
緩衝區參數 (會話級,按需分配)
| 參數 | 用途 | 建議 |
| sort_buffer_size | ORDER BY/GROUP BY 排序 | 256K-2M,複雜排序適當加大 |
| read_buffer_size / read_rnd_buffer_size | 全表掃描/隨機讀取 | 128K-256K |
| join_buffer_size | 無索引 JOIN (全表掃描關聯) | 256K-1M,優先加索引避免用到 |
| tmp_table_size / max_heap_table_size | 內部臨時表 (HEAP) 最大值,超過轉 MyISAM 磁碟表 | 16M-64M,GROUP BY/DISTINCT 大結果集調大 |
| myisam_sort_buffer_size | REPAIR TABLE / ALTER TABLE 索引重建 | 8M-64M |
InnoDB 專用參數 (關鍵見 74921)
- innodb_buffer_pool_size
- innodb_log_file_size / innodb_log_files_in_group
- innodb_flush_log_at_trx_commit
- innodb_flush_method = O_DIRECT
- innodb_file_per_table = ON
- innodb_io_capacity (SSD 5000-20000)
啟動參數生效方式
- 配置文件
my.cnf [mysqld] 區塊 → 重啟服務 (永久)
- 命令列
mysqld --key_buffer_size=32M --table_cache=128 → 僅當前實例
- 運行時動態:
SET GLOBAL sort_buffer_size=4M (部分參數支援)
驗證參數生效
mysqld --key_buffer_size=32M --help | grep key_buffer_size
SHOW GLOBAL VARIABLES LIKE 'key_buffer_size';
不同硬體配置範例
# 大記憶體、多表、中等併發
safe_mysqld -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M
# 少記憶體、大量連線
safe_mysqld -O key_buffer=512K -O sort_buffer=100K -O record_buffer=100K
# 極少資源嵌入式
safe_mysqld -O key_buffer=512K -O sort_buffer=16K -O table_cache=32 -O record_buffer=8K -O net_buffer=1K
調優原則
- 先調全域核心參數 (Buffer Pool、Log、快取)
- 再調會話級參數,針對具體慢查詢
- 每次單一變更,觀測指標 (QPS、延遲、鎖等待、磁碟 IO)
- 善用
mysqld --help --verbose 查看當前編譯預設值與範圍