面試 MySQL DBA 最愛問:「裝完預設配置,第一件事調什麼?」許多候選人答不上來,線上更有無數實例跑在預設值上。本文針對「大多數常見負載」真正關鍵的 4-5 個參數深度解析,調對它們,效能提升立竿見影;其餘參數多半只是錦上添花。
| 參數 | 適用引擎 | 建議值 | 核心影響 |
|---|---|---|---|
key_buffer_size | MyISAM | 可用記憶體 30-40%(純 MyISAM) | 索引緩存,直接決定 MyISAM 查詢速度 |
innodb_buffer_pool_size | InnoDB | 可用記憶體 70-80%(純 InnoDB) | 數據+索引統一緩存,InnoDB 生命線 |
innodb_log_file_size | InnoDB | 256M~2G(視寫入量) | Redo log 大小,影響寫入吞吐與恢復時間 |
innodb_flush_log_at_trx_commit | InnoDB | 1(最安全)或 2(高寫入可妥協) | ACID 與效能平衡點 |
max_connections | 通用 | 應用峰值連接數 + 余量 | 防「Too many connections」 |
Key_reads / Key_read_requests < 0.01(命中率 > 99%)。Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests < 0.01。SET GLOBAL innodb_buffer_pool_size=...),無需重啟。innodb_log_files_in_group=2(共 2 個檔案)。innodb_fast_shutdown=0 慢速關機,確保 log 刷乾淨,再刪除舊 log 檔啟動。| 值 | 行為 | 適用場景 |
|---|---|---|
| 1(預設) | 每次 commit 寫 log 並 fsync 到磁碟 | 核心交易、金融、訂單系統(零資料遺失) |
| 2 | 寫 log 到 OS Cache,每秒 fsync 一次 | 高寫入、可容忍 1 秒資料遺失(如日誌、統計) |
| 0 | 寫 log 到 OS Cache,由 OS 決定何時 fsync | 極高寫入、資料可重算(如爬蟲暫存) |
MySQL 5.6.3 後標記棄用,5.7 移除。現代版本由 innodb_buffer_pool_size 統一管理,無需單獨設定。
SELECT ENGINE, COUNT(*) FROM information_schema.TABLES GROUP BY ENGINE;innodb_buffer_pool_size(InnoDB 為主)或 key_buffer_size(MyISAM 為主)。innodb_log_file_size(寫入密集場景)。innodb_flush_log_at_trx_commit 符合業務安全等級。max_connections、thread_cache_size、table_open_cache 等連接/緩存參數。performance_schema、sys schema 監控,建立基準線。sysbench、tpcc-mysql 模擬真實負載,對比 QPS、延遲、P99。