面試 DBA 最愛問:「裝好 MySQL 後該調什麼?」令人驚訝的是,許多生產環境仍跑預設值。實際上只有少數參數真正關鍵,調對它們能解決 80% 效能問題。
| 參數 | 適用引擎 | 建議值 | 說明 |
|---|---|---|---|
key_buffer_size | MyISAM | 可用記憶體 30-40% | 索引快取。MyISAM 資料靠 OS cache,須留記憶體給 OS。若 .MYI 只有 1GB,設 4GB 純浪費 |
innodb_buffer_pool_size | InnoDB | 可用記憶體 70-80% | InnoDB 極度依賴 buffer pool(含資料+索引)。預設值極小,不調效能如蝸牛。資料量小勿過度配置 |
innodb_additional_mem_pool_size | InnoDB | 20MB+ | 內部資料結構配置。現代 OS 記憶體充足影響不大 |
innodb_log_file_size | InnoDB | 64-512MB | 大寫入負載關鍵。值越大效能越好,但會增加崩潰恢復時間 |
innodb_log_buffer_size | InnoDB | 8-16MB | 寫入高峰或大交易需調大。每秒刷盤一次,無需超過 1 秒產生量 |
innodb_flush_log_at_trx_commit | InnoDB | 2(平衡) | 預設 1(每提交刷盤)極慢。設 2:只刷 OS cache,每秒刷盤,最多丟 1 秒資料。設 0 最快但不安全 |
table_open_cache (table_cache) | 通用 | 1024+(視表數與連線數) | 打開表開銷大。足夠緩存所有常用表。大連線數需調大,見過 100,000 |
thread_cache_size | 通用 | 16+ | 執行緒建立/銷毀開銷大。目標:平常運作無需新建執行緒。Threads_Created 持續增長需調大 |
query_cache_size | 通用 | 32-512MB(視讀多寫少) | 讀多寫少且無應用層快取有用。過大維護成本高反而拖慢。啟用後觀察命中率 |
sort_buffer_size 等 session 變數 | 通用 | **依負載調整,非越大越好** | 簡單查詢無需加大。64GB 記憶體也不代表要設大。錯誤設定會降低效能 |
my-small.cnf、my-medium.cnf、my-large.cnf、my-huge.cnf,比預設值好得多SHOW GLOBAL STATUS、SHOW ENGINE INNODB STATUS、慢查詢日誌結語: 參數調校無銀彈,核心在於「理解負載、針對瓶頸、持續觀測」。