MySQL 可調參數眾多,但大多數負載下僅有少數真正關鍵。設對這幾個,其他微調效果有限。以下依儲存引擎分類說明核心參數。
key_buffer_size
極重要。純 MyISAM 可設可用記憶體 30-40%。需留記憶體給 OS 快取資料(資料常大於索引)。避免浪費:.MYI 只 1GB 卻設 4GB。極少用 MyISAM 時,保留 16-32MB 供臨時表索引。
innodb_buffer_pool_size
InnoDB 對緩衝極度敏感(MyISAM 尚可忍受預設)。InnoDB 同時快取資料與索引,無需留太多給 OS。純 InnoDB 可設 70-80% 可用記憶體。資料量小且不暴增時無需設過大。
innodb_additional_mem_pool_size
對效能影響不大(現代 OS 分配足夠時)。可設 20MB+,視 InnoDB 內部分配需求而定。
innodb_log_file_size
高寫入、大資料集場景關鍵。值越大效能越好,但增加恢復時間。常設 64-512MB 視伺服器規模。
innodb_log_buffer_size
中等寫入、短事務預設足夠。寫入峰值或大負載時調大。每秒刷盤一次,無需超過 1 秒產生量。通常 8-16MB 足矣,小機器設更小。
innodb_flush_log_at_trx_commit
預設 1 導致 InnoDB 比 MyISAM 慢 1000 倍的主因。每次提交刷盤,極耗資源(無電池備援快取時)。
建議設 2:僅刷至 OS 快取,每秒刷盤,極少丟失 1-2 秒更新。
設 0 更快但不安全(崩潰丟事務)。設 2 僅丟 OS 快取部分。
table_open_cache(舊名 table_cache)
開表開銷大(MyISAM 標記 .MYI 表頭)。設夠大避免頻繁開關。現代硬體設 1024(200+ 表)或更高(大連線數)。見過 100,000。
thread_cache_size
執行緒建立/銷毀開銷大。建議 ≥16。若 Threads_created 持續增長,調大。目標:平常無需新建執行緒。
query_cache_size
大量讀、無應用層快取時有用。勿設過大,維護開銷會拖慢 MySQL。通常 32-512MB。觀察命中率,低則關閉。
全域參數依硬體/引擎;會話參數(如 sort_buffer_size)依負載設定。簡單查詢無需調大,即使有 64GB 記憶體,錯誤調大反降效能。建議負載分析後再調會話參數。
MySQL 發行版內含多種 my.cnf 範例(如 my-small.cnf 至 my-huge.cnf),作為起始模板遠優於預設值。