my.ini (Windows) 或 my.cnf (Linux) 是 MySQL 核心配置文件,位於安裝目錄或 /etc。本文匯總生產環境常用優化參數,按通用、MyISAM、InnoDB 三類整理,附帶預設值、建議值與說明。
一、通用核心參數
| 參數 | 預設值 | 建議值 | 說明 |
| max_connections | 100 | 1024 | 最大同時連接數,視業務併發調整 |
| query_cache_size | 0 | 16M~256M | 查詢緩存大小,按需倍增,對讀多寫少場景關鍵 |
| sort_buffer_size | 512K | 2M~16M | 每線程排序緩存,ORDER BY/GROUP BY 生效,慎設過大 |
| read_buffer_size / record_buffer | 128K | 2M~16M | 全表掃描時每線程緩存 |
| table_cache / table_open_cache | 64 | 512~2048 | 所有線程打開表數量,影響文件描述符需求 |
二、MyISAM 專用參數
| 參數 | 預設值 | 建議值 | 說明 |
| key_buffer_size | 8M | 128M~256M (≤ 物理記憶體 30%) | 索引塊緩存,MyISAM 效能核心參數 |
| read_buffer_size | 128K | 16M | 全表掃描讀緩存 |
| myisam_sort_buffer_size | 16M | 128M | 建立/修復索引時緩存,勿設過大 |
三、InnoDB 核心參數(重中之重)
| 參數 | 預設值 | 建議值 | 說明 |
| innodb_buffer_pool_size | 32M | 物理記憶體 50%~70% (上限 2G~4G) | 索引+數據緩存池,最關鍵參數,越大磁碟 I/O 越少 |
| innodb_additional_mem_pool_size | 2M | 20M~200M | 元數據緩存,大內存機器建議調大 |
| innodb_flush_log_at_trx_commit | 1 | 0/2 (高併發) / 1 (數據安全) | 0: 秒級刷盤;1: 每次提交刷盤(最安全);2: 提交寫文件、秒級刷盤(折中) |
| innodb_log_file_size | 8M | 256M~1G (buffer_pool 25%~50%) | Redo Log 文件大小,避免頻繁 checkpoint 刷髒頁 |
| innodb_log_buffer_size | 128K | 1M~8M | Log 緩存,大事務建議調大 |
調優原則
- 先測量,再調整:基於
SHOW GLOBAL STATUS、SHOW ENGINE INNODB STATUS、慢查詢日誌分析瓶頸。
- 單參數變更:每次調整一個參數,觀察效果,避免相互干擾。
- 記憶體總量守恆:所有緩存總和不可超過物理記憶體 80%,預留系統與連接開銷。
- InnoDB 為主流:現代應用以 InnoDB 為主,優先調優
innodb_buffer_pool_size、innodb_flush_log_at_trx_commit、Redo Log 容量。